javascript - node.js 的作业队列

标签 javascript node.js redis rabbitmq task-queue

<分区>

背景

在一个开源项目中工作,我们有很多后端处理任务,有些繁重,有些轻量级,速度非常快。

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

要求

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

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

From RabbitMQ's tutorial, 我已经看到它有可靠的模式(对于工作,以及 channel ,所以如果任何崩溃,工作都不会丢失)并且支持完全按照我想要的方式缩放,但它不使用 Redis(我可以'不知道是赞成还是反对)。

我也研究过 Kue,但它的 API 非常繁琐,我无法立即判断它是否适合我。

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

是否有人熟悉不同的队列技术,并且可以根据要求说出最适合项目的队列技术?

最佳答案

不是 Kafka - 它的目的不是一般的作业/工作队列。它是一个分布式事件日志和事件队列,用于其他目的(事件源等)。

否则,选择一个并运行它。 Kue 或 Disque 或 RabbitMQ 或 ZeroMQ 或 Gearman 或其他什么。他们都会为你工作。他们都有权衡,但你上面描述的并没有告诉我任何选项都是不可能的。

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

但其他选项都可以。只需选择一个即可。

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

关于javascript - node.js 的作业队列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38014296/

相关文章:

javascript - 如何在 Sinon.js 中测试 Controller 中使用的辅助函数

缓存数据库问题

redis - 列出 kubectl pod 的节点

javascript - Vite 开发服务器中的自定义 URL(多页面应用程序)

javascript - 在上传到谷歌云存储之前用锐利调整图像大小

node.js - 使用 Node cross-env 的多个命令的语法(windows 和 linux)

python - Celery + Redis后端: How to limit queue size?

javascript - 什么更快 - 将 2 个排序数组合并为一个没有重复值的排序数组

javascript - Typescript 无法识别 VS 2015 中的 Javascript

javascript - JS直接访问Concat方法