Node JS 中 Celery 的等价物

Posted

技术标签:

【中文标题】Node JS 中 Celery 的等价物【英文标题】:Equivalent of Celery in Node JS 【发布时间】:2015-04-12 19:04:27 【问题描述】:

请在 Node JS 中推荐一个等效的 Celery 来运行异步任务。 我已经能够搜索到以下内容:

    (Later) 顾(Kue), 咖啡风格 (coffee-resque) cron (cron) node-celery(node celery)

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

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

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

【问题讨论】:

您想使用 MongoDB 作为代理还是后端?或者,worker 会与 MongoDB 交互吗? 我想使用 MongoDB 作为后端,RabbitMQ/Redis 作为代理 【参考方案1】:

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

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

––––––––––––––––––––––––––––––––––––––––––––––––

Edit-1/2018

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

【讨论】:

Kue 是旧的仓库,维护得不好。 这也是个老帖子 Kue 不再维护,所以这个答案可能应该被删除【参考方案2】:

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

知道这将使您能够write your own celery in node.js。

node-celery 是一个库,它使您的节点进程既可以作为 celery 客户端(生产者/发布者)也可以作为 celery worker (Consumer)。

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

【讨论】:

我认为你没有考虑到 celery 为你解决的所有问题。不仅仅是 AMQP 之上的一个小层。【参考方案3】:

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

【讨论】:

【参考方案4】:

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

,过了这么久,还是有老旧的核心问题没有解决:

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

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

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

就我个人而言,我没有尽可能多地使用 Celery 来全力以赴,但是当我一直在寻找 Celery 替代品时,发现有人建议 Kue 只是让我的血液沸腾。

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

【讨论】:

感谢您在此处发布您的体验。这让我笑了,同时也同情->“让我的血液沸腾了”。当提到某些过度宣传的 Web 应用程序时,我也有同样的感觉。我已经浪费了好几个月的时间来与那些人们漫不经心地推荐的应用程序作斗争,只是因为它们是趋势。 您引用的答案是 4 岁,如果您使用旧帖子并在没有先验证的情况下基于您的解决方案,那么,那是您的错误......现在,我建议人们使用Celery 一路走来,因为它是一个维护良好的库。 我们从错误中吸取教训。在 2016 年底,当我在寻找解决方案时,Kue 似乎就是这样。只有当你挖掘得足够深时,你才会发现这不是你想要的。分享了我对其他人不选择 Kue 的痛苦感受(这仍然是问题的第二位)。正如我所看到的,自 2017 年年中以来,Kue 就再也没有站起来。 @securecurve 感谢您更新您的答案;)【参考方案5】:

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

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

【讨论】:

以上是关于Node JS 中 Celery 的等价物的主要内容,如果未能解决你的问题,请参考以下文章

celery基础

Celery(补充)

Celery完成定时任务

测试Celery 在Windows中搭建和使用的版本

Celery第一步

【celery】任务重复执行