Node JS 中 Celery 的等价物

问题描述 投票:0回答:6

请建议 Node JS 中的 Celery 等效项来运行异步任务。 我已经能够搜索以下内容:

  1. 稍后
  2. 库伊(库伊),
  3. 咖啡风格(咖啡风格
  4. cron(cron
  5. 节点芹菜(节点芹菜

我在后台运行手动和自动线程并与 MongoDB 交互。

node-celery 使用的是 redis DB 而不是 Mongo DB。有什么办法可以改变它吗?当我安装node-celery时,redis被安装为依赖项。

我是芹菜新手,请指导。谢谢。

node.js mongodb cron laterjs node-celery
6个回答
19
投票

Celery 基本上是一个 RabbitMQ 客户端。有生产者(任务)、消费者(工作人员)和在任务和工作人员之间传递消息的 AMQP 消息代理。

了解这一点将使您能够在node.js中编写自己的celery

enter image description here

这里的

node-celery 是一个库,使您的节点进程能够作为 celery 客户端(生产者/发布者)和 celery 工作人员(消费者)

参见 https://abhishek-tiwari.com/post/amqp-rabbitmq-and-celery-a-visual-guide-for-dummies


7
投票

还值得一提的是https://github.com/OptimalBits/bull。它是一个快速、可靠、基于 Redis 的队列,为稳定性和原子性而编写。

Bull 4 目前处于测试阶段,具有一些不错的功能 https://github.com/taskforcesh/bullmq


7
投票

编辑-1/2018

我的建议是现在不要使用 Kue,因为它似乎是一个停滞的项目,而是使用 Celery。它得到社区的良好支持和维护,并支持大量用例。


旧答案

选择 Kue,它是一个类似于 Python 语言中的 Celery 的整体解决方案;它具有以下概念:生产者/消费者、延迟任务、任务重试、任务 TTL、在侦听同一队列的多个消费者之间循环任务的能力等。

Celery 可能更先进,具有更多功能,支持更多代理,如果您愿意,您可以使用 celery-node,但是,在我看来,我认为没有必要采用需要安装 python 的混合解决方案当你只能使用足以满足 90% 情况的语言时,请选择 Node(当然,除非有必要)。


6
投票

选择 Kue,它是一个类似于 Python 语言中的 Celery 的整体解决方案;它具有以下概念:生产者/消费者、延迟任务、任务重试、任务 TTL、在侦听同一队列的多个消费者之间循环任务的能力等。

Kue,过了这么久,仍然有同样的老核心问题没有解决:

  • github.com/Automattic/kue/issues/514
  • github.com/Automattic/kue/issues/130
  • github.com/Automattic/kue/issues/53

如果阅读本文的人不想重写 Kue,请不要从它开始。它适合简单的任务。但如果您想处理大量任务、并发任务或任务链(当一个任务创建另一个任务时)- 停止浪费时间

我浪费了一个月的时间尝试调试 Kue 但仍然没有成功。最好的选择是在 RabbitMQ 和 Rabbot(另一个 RabbitMQ 总结)上将 Kue 更改为 Pubs/sub 消息队列。

就我个人而言,我并没有那么多地使用芹菜来全力以赴,但当我一直在寻找芹菜替代品时,发现有人为 Kue 提供建议让我热血沸腾。

如果您想发送延迟的电子邮件(如 Kue 示例),您可以随心所欲,而不必担心错误。但如果你想要一个可靠的系统任务/消息队列,甚至不要从 Kue 开始。我个人会选择 5.node-celery(node celery)


2
投票

根据我们的经验,Kue 不可靠,甚至丢掉了工作。 当然,我们使用的是旧版本,此后可能已修复。 那也是在 TJ 放弃该项目并且尚未选择新维护者的时期。 我们切换到 beanstalkd 并且非常高兴。 我们使用 https://github.com/ceejbot/ Fivebeans 作为 beanstalkd 的节点接口。


0
投票
  • 简单的解决方案

https://www.npmjs.com/package/node-cron

代码:

npm install --save node-cron
import cron from 'node-cron'

cron.schedule('* * * * *', () => {
  console.log('running a task every minute');
});
© www.soinside.com 2019 - 2024. All rights reserved.