作业为node.js排队

时间:2016-06-24 13:11:01

标签: javascript node.js redis rabbitmq task-queue

背景

在一个开源项目上工作,我们有很多后端处理任务,一些重量级,一些轻量级,以非常高的速率进行。

我们决定使用作业队列来处理不同的工作,因为我们可以通过排队来扩大消费者的规模,从而一次执行更多的工作,并保证即使工作人员崩溃也会实际完成工作。

要求

可靠性很重要。我们希望能够确保每个作业都已完成,即使工作人员执行了崩溃,队列崩溃或系统崩溃。

我们还希望能够在重载队列上扩展工作模块。

this solution我已经看到它有可靠的模式(对于作业,以及通道,所以如果有任何崩溃,作业不会丢失)并支持完全按照我想要的缩放,但它没有'使用Redis(我无法判断他是专业人士还是骗子)。

我也看过Kue,但它的API非常繁琐,我无法立刻告诉它是否适合我。

我也听说过Disque(来自Redis的作者),Bull,Kafka等等,并且对可用技术的数量感到困惑。

是否有人熟悉不同的队列技术,可以根据要求判断哪种项目最适合该项目?

1 个答案:

答案 0 :(得分:3)

不是卡夫卡 - 它的目的不是一般的工作/工作队列。它是一个分布式的偶数日志和事件队列,用于其他目的(事件采购等)。

否则,选择一个并运行它。 Kue或Disque或RabbitMQ或ZeroMQ或Gearman或其他。它们都能很好地为您服务。他们都有权衡,但你上面所描述的并没有告诉我任何选项是不可能的。

就个人而言,我更喜欢RabbitMQ。我喜欢集中式代理模型,并且在消息队列系统中工作了很多年,我喜欢RabbitMQ将好的分布式系统的许多模式和实践融入其中的方式。我喜欢手动确认消息已被处理,将其从队列中删除 - 或者让进程崩溃,并且消息返回到队列的能力。在我看来,有很多关于RabbitMQ的东西。

但其他选择都很好。只需选一个即可。

(FWIW,我在http://rabbitmq4devs.com有一个RabbitMQ for Node Developers培训包)