来自NodeJS的队列Resque作业

时间:2012-08-28 04:14:15

标签: ruby ruby-on-rails-3 node.js redis resque

我想从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宝石,与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 个答案:

答案 0 :(得分:4)

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

(名称说咖啡但你也可以用javascript) 看起来也很简单,你会对意外结果,破坏变化等更安全。

答案 1 :(得分: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()

启用工作程序代码以处理任务

class WorkerClassName
    @queue = :queue_name
    def self.perform(arg1, arg2, arg3)
        # Logic
    end
end

答案 2 :(得分:1)

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

答案 3 :(得分:0)

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

这是an article,可能会帮助您入门。它还有一个指向Heroku托管的演示的链接,您可以在其中连接Redis实例并查看您的Resque队列和作业。