Ruby 从NodeJS队列重新创建作业

Ruby 从NodeJS队列重新创建作业,ruby,ruby-on-rails-3,node.js,redis,resque,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\"]}" 直接从节点发出这些命令似乎有效。这里有我不知道的隐藏的

我想对来自NodeJS的Resque作业进行排队。监视我看到的Redis命令:

1346127083.495055 "sadd" "resque:w:tasks:queues" "facebook"
1346127083.495471 "rpush" "resque:w:tasks:queue:facebook" "{\"class\":\"Hello::FacebookFriends\",\"args\":[\"2342324\"]}"
直接从节点发出这些命令似乎有效。这里有我不知道的隐藏的bug或东西吗

更新:我的作业是用Ruby编写的。虽然我喜欢NodeJS,而且我在Javascript方面做得更好,但我需要大量在NPM环境下仍然不可用的库,例如与Twitter和Facebook通信(Twitter和koalagems,Node没有可比性)。所以我想从我的NodeJS服务启动Ruby作业

到目前为止,我使用的功能与coffee resque中的此功能类似:

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

我认为你应该使用:

(名字上写着咖啡,但你也可以将它与javascript一起使用)
看起来也很简单,而且对于意外结果、中断更改等,您会更安全一些。

为什么不设置一个触发作业的服务呢?这将是一个额外的网络跳跃,但代码应该足够简单(例如,请看)。

您可以使用TaskRabbit的库来完成此操作


下面是一个可能会帮助您开始的示例。它还有一个指向Heroku上托管的演示的链接,您可以在其中连接Redis实例,并查看重新设置队列和作业。

您可以使用TaskRabbit中的节点重新设置

Lambda代码

const NodeResque=require('node-resque')
const connectionDetails={
包装:“ioredis”,
主机:“redis主机”,
港口:6379
}
const queue=new NodeResque.queue({
连接:connectionDetails
})
queue.on('error',函数(error){
console.log(错误)
})
等待队列。连接()
等待队列。排队('queue_name','WorkerClassName',['arg1','arg2',…])

wait queue.end()
哦,哇,我确信这是一个实际的Resque端口(就像他们的文档所说的)。谢谢,这是一个港口!我只要看看源代码就知道我错了。而且,为工作人员实际生成单独的线程似乎并不正确,我在这里可能错了。什么,我想你想让作业从Node.js排队。而咖啡清酒正是这样做的。如果你只是想排队,为什么你关心工人?显然,coffee resque中的排队函数很简单,所以您可以复制它。我只是指出,通过使用它,您可以安全地看到,如果对resque格式进行了更改,那么coffee resque更新将为您处理此问题。从源代码来看,我没有仔细查看,coffee resque在服务器线程内创建了worker,这与worker应该做的完全相反。那么在Redis上排队就足够了?Resque将负责清理工作?如果你只是想让工作排队,我相信coffee Resque不会产生任何工人(或者这将是一个非常糟糕的错误)。而且清理工作更可能由清理工人来完成。尽管到目前为止,如果源代码看起来排队就这么简单,我想复制代码并避免添加另一个依赖项听起来也不错。你是什么意思?在ruby中创建一个路由,然后从节点ping它?确切地说,创建一个路由,在调用时创建作业。这不是一个很好的解决方案,但它应该满足您的需要。
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()