4

我想从 NodeJS 排队 Resque 作业。我看到的监控 Redis 命令:

1346127083.495055 "sadd" "resque:w:tasks:queues" "facebook"
1346127083.495471 "rpush" "resque:w:tasks:queue:facebook" "{\"class\":\"Hello::FacebookFriends\",\"args\":[\"2342324\"]}"

直接从 Node 发出这些命令似乎有效。是否有任何隐藏的错误或我不知道的事情?

更新:我的工作是用 Ruby 编写的。虽然我喜欢 NodeJS 并且我在 Javascript 方面做得更好,但我需要大量在 NPM 中仍然无法正常使用的库,例如与 Twitter 和 Facebook 通信(Twitter 和 Koala gems,Node 没有可比性)。所以我想从我的 NodeJS 服务启动 Ruby Jobs。

到目前为止,我使用的东西看起来类似于 coffee-resque 中的这个函数:

 enqueue: (queue, func, args) ->
    @redis.sadd  @key('queues'), queue
    @redis.rpush @key('queue', queue),
      JSON.stringify class: func, args: args || []

这里:

job = JSON.stringify
    class: 'Hello::FacebookFriends'
    args: [user_id, fb.id]
@redis_client.multi()
    .sadd('resque:w:tasks:queues', 'facebook')
    .rpush('resque:w:tasks:queue:facebook', job)
    .exec()
4

4 回答 4

4

我认为你应该使用:https ://github.com/technoweenie/coffee-resque

(名字说咖啡,但你也可以用 javascript 来使用它)看起来也很简单,而且你会更安全地应对意外结果、破坏性更改等。

于 2012-08-29T16:24:14.990 回答
2

您可以使用来自 TaskRabbit 的 node-resque

Lambda 代码

const NodeResque = require('node-resque')
const connectionDetails = {
  pkg: 'ioredis',
  host: 'redis host',
  port: 6379
}
const queue = new NodeResque.Queue({
  connection: connectionDetails
})
queue.on('error', function(error) {
  console.log(error)
})
await queue.connect()
await queue.enqueue('queue_name', 'WorkerClassName', ['arg1', 'arg2', ..])
await queue.end()

用于处理任务的 Rails 工作者代码

class WorkerClassName
    @queue = :queue_name
    def self.perform(arg1, arg2, arg3)
        # Logic
    end
end
于 2019-02-05T07:20:22.217 回答
1

为什么不建立一个可以触发工作的服务呢?这将是通过网络的额外一跳,但代码应该足够简单(例如,查看http://www.sinatrarb.com/ )。

于 2012-09-04T17:18:01.317 回答
0

您可以使用 TaskRabbit 的node-resque库来执行此操作。

这是一篇可以帮助您入门的文章。它还有一个链接到托管在 Heroku 上的演示,您可以在其中连接您的 Redis 实例并查看您的 Resque 队列和作业。

于 2017-06-25T06:56:41.440 回答