我想从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()
答案 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队列和作业。