node.js/ruby与beanstalkd的集成

node.js/ruby与beanstalkd的集成,ruby,node.js,beanstalkd,Ruby,Node.js,Beanstalkd,这与支付处理相关,这是我的示例用例,但我正在考虑尝试使用beanstalkd在同一台服务器上集成node.js和ruby。基本上,我想使用node.js作为我的主web服务器,但是当我需要进行一些支付处理时,我想使用一些健壮和稳定的东西,比如ruby 我正在考虑尝试使用beanstalkd,让node.js将ruby的支付处理作业排队,以便在后台执行。beanstalkd的文档有点单薄,所以我很难确定这是否是一个好方法,或者我将如何进行。但从我所知道的情况来看,启动Beanstalk进程,然后让

这与支付处理相关,这是我的示例用例,但我正在考虑尝试使用beanstalkd在同一台服务器上集成node.js和ruby。基本上,我想使用node.js作为我的主web服务器,但是当我需要进行一些支付处理时,我想使用一些健壮和稳定的东西,比如ruby


我正在考虑尝试使用beanstalkd,让node.js将ruby的支付处理作业排队,以便在后台执行。beanstalkd的文档有点单薄,所以我很难确定这是否是一个好方法,或者我将如何进行。但从我所知道的情况来看,启动Beanstalk进程,然后让node.js连接到该进程以向其发送作业,并使用ruby脚本执行作业并返回结果应该是相当简单的。

Beanstalk适合此任务。确保使用binlog选项使作业在beanstalkd重新启动之间持久化

您的node.js进程将使用一个管道(称为“付款”),并将作业放入其中,并具有适当的优先级

然后,您的Ruby脚本可以查看支付管并处理作业

确保您为作业提供了足够的TTL—您希望在beanstalk假定作业失败并重新排队之前,确保支付处理有时间完成


只是好奇-您将如何向客户提供付款成功的反馈?也许Ruby脚本会更新数据库中的记录

所以在深入研究之后,我确实找到了评估beanstalkd真正需要的文档。在我读过的任何东西或主页(尽管它在一个名为doc的文件夹中)中都没有链接到源代码中的一个,它提供了有关其功能和限制的更好的详细信息

作为一个异步工作队列,它看起来非常好,非常适合node.js,并且它非常适合与一些Ruby代码通信以进行支付处理,但是正如dkam所说,如何将响应返回到node.js以更新客户端。虽然我认为这对许多任务都有意义,但对我的任务来说还不够


根据阿尔弗雷德的建议,我已经调查了redis,虽然它并不是我开箱即用的东西,但我认为它已经足够了。在redis for Ruby的基础上已经有了一个构建,因此我认为我应该能够用大致的actor风格语义,或者至少是回调语义,在节点和Ruby之间进行简单的对话。

我将使用redis消息队列语义。我认为node.js会更快,因为有一个非常好的c扩展。是的,我最终能够找到beanstalkd协议文档,所以这是有意义的,但是,是的,关键是反馈。我很确定,完成这一部分的唯一方法是让node.js等待某种返回管,或者甚至是一个特定于作业id的返回管。最后,我认为redis可能是一个更好的解决方案。如果你使用Beanstalk,我想你应该让node.js创建一个事务记录,将状态设置为“排队”或类似的。该记录将成为customer的事务状态——Node.js将轮询该记录。当您的Ruby进程抓取作业时,将DB记录更新为“Pending”,然后在完成后更新为“Complete”或“Failed”。我不确定这一点,但Redis有PubSub,我猜它不使用轮询。Redis的速度非常快,与node和ruby进程位于同一个框中。我认为这可能比轮询数据库更干净。不过,很高兴听到我错了。