如何使用 rabbitmq 在 nodejs 中设计任务调度程序,在跨越多个进程时不会 运行 相同的任务?

How to design a task scheduler in nodejs with rabbitmq that won't run the same task when spanning multiple process?

我正在尝试将 RabbitMQ 实现为现有 Web 应用程序中的通用任务队列。但我还需要运行一个计划任务来按设定的时间间隔聚合一些用户数据。

我知道任务调度不是rabbitMQ的核心设计,但似乎可以通过死信交换来完成。但我担心的是,当我有多个 Web 应用程序实例时 运行ning 任务将被安排多次。

有什么方法可以构造它来避免这个问题吗?如果可能的话,也许限制交换的连接量?

正如您所说,它不在 RabbitMQ 的核心设计中。

您可以查看 RabbitMQ 博客,了解他们如何解决信号量队列的问题。 https://www.rabbitmq.com/blog/2014/02/19/distributed-semaphores-with-rabbitmq/

"when I have multiple instances of the web app running the task will get scheduled multiple times." 这是事实,但您可以稍微更改设置。 Ether 引入了一个 "shared memory"(比如带有主键强制的数据库)。并确保仅在交易成功后才发布到 rabbit。 或者您可以查看某种 "round robin" 交换并完全在 RabbitMQ 上下文中利用它 (https://github.com/jbrisbin/random-exchange)