Express 中的 Laravel 队列作业相当于啥?

Posted

技术标签:

【中文标题】Express 中的 Laravel 队列作业相当于啥?【英文标题】:What's the equivalent of Laravel queue jobs in Express?Express 中的 Laravel 队列作业相当于什么? 【发布时间】:2017-12-08 08:26:56 【问题描述】:

Laravel 提供了一项名为 Queues 的功能,您可以在其中使用服务(beanstalkd、Amazon SQS、Rabbit MQ)将长时间运行的任务委托给后台工作人员。一个简单的示例是通过该排队作业发送电子邮件,而不是从控制器发送电子邮件。所述排队作业能够识别任务是否完成,或者如果失败,则重试一定次数。

此功能的 Express (NodeJS) 等价物是什么(如果它存在的话)?我尝试通过直接查找服务上的资源(如 RabbitMQ)来研究该主题,但我只找到了像 this one 这样的教程,但只是通过阅读它看起来他们正在从头开始实现这个东西。

也许我的期望是这里出了什么问题,但不就是只为排队的作业编写业务逻辑代码并分派它吗?

【问题讨论】:

【参考方案1】:

这是一个老问题,但由于我们已经尝试了几种使用 laravel 和 nodejs 的队列解决方案,所以我想分享一些经验。

首先,laravel queue worker normally uses redis。每个作业都RPUSHed 到 redis 列表或ZADDed 到 ZSET。它不使用像 RabbitMQ 这样的消息队列。我会争辩说,使用 RabbitMQ 对于这项任务来说是“合格的”。这是an article 谈论从 RabbitMQ 切换到 Redis 以进行队列实现,引用“虽然 RabbitMQ 完成了这项工作并且做得很好,但我们决定将我们所有的 RabbitMQ 队列转换为 Redis。为了简单性和多功能性,我们切换了完整性(显然是为了缓存和 K/V 目的)。”

此功能的 Express (NodeJS) 等效项是 bull 或 bee queue。他们都像 laravel queue 一样使用 redis。我没有尝试kue,因为我觉得它太旧了。

我最终选择了公牛而不是蜜蜂,因为我找不到一种简单的方法来暂停/取消蜜蜂的工作。我也觉得公牛比蜜蜂更积极地维护。

值得一提的是,有一个名为 queue 的 npm 包实现了队列 @9​​87654326@。但它不适用于我的用例。

【讨论】:

【参考方案2】:

在我们的例子中,当我们需要实现后台作业以使用 node 和 express 向批量用户发送带有附件的电子邮件时,我们遇到了强大的 npm 模块 Kue,它提供了 RabbitMQ 的所有功能php 中提供

Official Documentation

希望对你有帮助!

【讨论】:

以上是关于Express 中的 Laravel 队列作业相当于啥?的主要内容,如果未能解决你的问题,请参考以下文章

如何将链式作业分派到 Lumen 6 中的队列?

如何使用 Laravel 5.1 在 IronMQ 中获取排队作业的数量?

Laravel 队列 - 作业之间暂停

Laravel 队列作业不加载文件

Laravel 5.7 - 队列作业太慢

生成为 Laravel 作业队列创建表的迁移?