node.js / ruby​​与beanstalkd的集成

这与付款处理的另一个问题有关,这就是我的示例用例,但我正在考虑尝试使用beanstalkd将node.js和ruby集成到同一台服务器上。 基本上,我想使用node.js作为我的主要Web服务器,但是当我需要做一些支付处理时,我想使用像Ruby这样健壮和稳定的东西。

我正在考虑尝试使用beanstalkd作为一种方式,让node.js将支付处理作业排队等待ruby在后台执行。 beanstalkd的文档有点渺茫,所以我很难弄清楚这是一个好方法,还是我怎么去做。 从我可以告诉的,它应该是相当简单的启动一个beanstalkd进程,然后有node.js连接到它发送作业,并有一个Ruby脚本,可以执行作业,并发回结果。

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

你的node.js进程将使用一个pipe道(称为“支付”), 并将作业置于其中,并具有适当的优先级。

您的Ruby脚本可以观看付款pipe理并处理作业。

确保您给作业提供足够的TTL – 您希望在beanstalk假定作业失败并重新排队之前确保付款处理有时间完成。

只是好奇 – 您将如何向客户反馈支付成功? Ruby脚本可能会更新数据库中的logging?

所以在根深蒂固之后,我确实find了我真正需要评估beanstalkd的文档。 源代码中有一个协议文档没有链接到我已经阅读的任何东西或主页面(虽然它在一个名为doc的文件夹中),它提供了有关其function和限制的更好的细节。

作为一个asynchronous工作者队列看起来非常好,这对于node.js来说是非常完美的,并且与一些Ruby代码进行通信来完成支付处理是非常合适的,但是正如dkam所说的那样,我该如何获得回应给节点.js能够更新客户端。 虽然我认为这对于许多任务来说是有意义的,但对我来说是不够的。

鉴于alfred的build议,我已经调查了redis,虽然这不是我所需要的开箱即用,但我认为这足够了。 在Ruby的redis之上已经有了一个演员库 ,所以我认为我应该能够做一些简单的事情,可以在节点和Ruby之间用粗略的演员风格的语义或者至less是callback语义进行交stream。

    Interesting Posts