Node.js中的作业队列

5
我正在寻找一个可以被php调用的node.js作业队列管理器。这是为了一个Web应用程序,该应用程序需要发送电子邮件、创建PDF文件等,我希望异步执行php进程。
流程示例:
1. 用户请求php页面。 2. Php调用任务队列管理器并添加任务。 3. 在php异步执行时,任务在node.js中执行,最好在系统闲置时执行。 4. 任务是执行php脚本。
为什么要使用这种“复杂”的系统?
1. 我们所有的Web应用程序都是用php(Zend Framework)编写的。 2. 我们想开始学习node.js。 3. 我们需要一个异步进程(快速响应!)。 4. “真正”的任务也应该是一个php脚本,以利用已经编写的php类、轻松访问数据库连接并尽可能地DRY。
此系统的用例:
1. 用户注册自己,系统将发送欢迎电子邮件。 2. 用户完成电子商务订单,系统将发送发票。
最后,我们还想使用node-cron来执行非系统范围的cron任务(非常特定于应用程序)。Node-cron将调用任务队列管理器,随后运行php脚本。
是否已经有这样的node应用程序?

它必须从PHP桥接到Node.js吗? - PirateApp
2个回答

2
在这种情况下,我更喜欢像RabbitMQ这样的消息队列和客户端库,比如node-amqpphp-amqp。然后只需将作业从PHP脚本发送到队列中,让Node.js从队列中获取作业即可。一个很大的优点是它是可扩展的,并且在企业市场上被广泛使用和测试过。

1
为什么你要在这个设置中使用这样的工具?它似乎可以工作,但对于这个目标来说过于复杂了。当然,彻底的测试和准备好进入企业市场是优点,但在我看来易用性和简单性也同样重要。 - Jurian Sluiman
RabbitMQ有很好的文档,不受编程语言限制(今天可能是nodejs,明天可能是python、ruby或java),并且拥有活跃的社区。当然,简单易用总是不错的,但我也会根据项目的活跃度选择我的技术。 - mlegenhausen

0

一个可能的选择是node-jobs,它使用Redis。


Redis据我所知是一个系统范围的安装。我们如何能够使节点作业(我希望可以在每个应用程序基础上运行)为每个应用程序使用redis?或者我们是否应该通过为所有作业添加应用程序名称前缀(可能是反向TLD)来简化此过程? - Jurian Sluiman
1
一个前缀可能会起作用:反向TLD是一个很棒的技巧。 - Femi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接