请在 Node JS 中建议一个等效的 Celery 来运行异步任务。我已经能够搜索以下内容:
我在后台运行手动和自动线程并与 MongoDB 交互。
node-celery 使用的是 redis DB 而不是 Mongo DB。有什么办法可以改变吗?当我安装 node-celery 时,redis 被安装为依赖项。
我是芹菜新手,请指导。谢谢。
Celery 基本上是一个 RabbitMQ 客户端。有生产者(任务)、消费者(工作者)和在任务和工作者之间传递消息的 AMQP 消息代理。
知道这将使您能够在 node.js 中编写自己的 celery。
这里的 node-celery 是一个库,它使您的节点进程能够同时作为 celery 客户端(生产者/发布者)和celery 工作者(消费者)工作。
见https://abhishek-tiwari.com/post/amqp-rabbitmq-and-celery-a-visual-guide-for-dummies
Go for Kue,它是一个类似于 Python 中的 Celery 的整体解决方案;它具有以下概念:生产者/消费者、延迟任务、任务重试、任务 TTL、跨多个消费者轮询任务的能力,这些消费者侦听同一个队列等。
可能 Celery 更先进,具有更多功能,支持更多代理,如果你愿意,你可以使用node-celery,但是,在我看来,我认为没有必要去寻求需要安装 python 和 node 的混合解决方案。仅使用在 90% 的情况下足够的语言(当然除非必要)。
–––––––––––––––––––––––––––––––––––––––––––––––––––––––</p>
编辑-1/2018
我的建议是现在不要使用 Kue,因为它似乎是一个停滞的项目,而是使用 Celery。它得到了社区的良好支持和维护,并支持大量用例。
还值得一提的是https://github.com/OptimalBits/bull。它是一个快速、可靠、基于 Redis 的队列,为稳定性和原子性而编写。
Bull 4 目前处于测试阶段,并具有一些不错的功能https://github.com/taskforcesh/bullmq
Go for Kue,这是一个类似于 Python 中的 Celery 的整体解决方案;它具有以下概念:生产者/消费者、延迟任务、任务重试、任务 TTL、跨多个消费者轮询任务的能力,这些消费者侦听同一个队列等。
Kue,经过这么长时间过去了,仍然有同样的老核心问题没有解决:
如果有人阅读本文不想重写 Kue,请不要从它开始。它适用于简单的任务。但是,如果您想处理其中的很多、并发或任务链(当一个任务创建另一个任务时),请停止浪费您的时间。
我浪费了一个月的时间尝试调试 Kue,但仍然没有成功。最好的选择是更改 RabbitMQ 和Rabbot上的 Pubs/sub 消息队列的 Kue (另一个 RabbitMQ 总结)。
就个人而言,我并没有使用 Celery 来全力以赴,但是当我一直在寻找 Celery 替代品时,发现有人建议 Kue 只是让我的血液沸腾。
如果您想发送延迟的电子邮件(如 Kue 示例),您可以随心所欲,而不必担心错误。但是如果你想要一个可靠的系统任务/消息队列,甚至不要从 Kue 开始。我个人会选择 5. node-celery(node celery)
根据我们的经验,Kue 不可靠,失去了工作。当然,我们使用的是旧版本,它可能已经修复了。那也是在 TJ 放弃该项目并且没有选择新的维护者的时期。我们切换到 beanstalkd 并且非常高兴。我们使用https://github.com/ceejbot/fivebeans作为 beanstalkd 的节点接口。