如何在rabbit MQ中为一个队列附加多个工作进程



我在Rabbit MQ中使用基于交换的模式。

生产者-->交换-->队列-->消费者1

如何运行多个使用者(C1、C2、C3等)以实现负载平衡和使用者的可扩展性

可以跑步吗/worker.js基于用途两次三次?

是的,多次运行您的工人应该是可以的,因为这将运行工人的多个实例来监听您的队列以实现您想要的。有关更多信息,请参阅RabbitMQ的本教程。具体参见章节循环调度

引用一些细节:

使用任务队列的优势之一是能够轻松地并行工作。如果我们正在积累积压的工作,我们可以增加更多的工人,这样就可以轻松地扩大规模。你需要打开三个控制台。两个将运行worker.js脚本。这些控制台将是我们的两个消费者——C1和C2。

只是添加@AJS答案。你可能想使用"进程监视器/管理器",如Supervisord来管理你的长期运行程序C1,最重要的是运行其中的多个程序(C1、C2、C3等)。只需在你的环境中安装supervisor(本地、VPS、Docker等),然后添加一个配置文件,如下图所示,使其运行、监视并根据需要重新启动多个worker.js进程,

因此,为您的程序创建一个supervisor配置文件,例如my_awesome_worker.conf,并将其放置在/etc/supervisor/conf.d目录中。

[program:wise_worker]
process_name=%(program_name)s_%(process_num)02d
command=node /my_app_location/worker.js
autostart=true
autorestart=true
numprocs=4
stderr_logfile=/var/log/myapp.err.log
stdout_logfile=/var/log/myapp.out.log
user=myuser

要更新更改,请运行

$sudo supervisorctl reread
$sudo supervisorctl update

请注意,process_name和numprocs部分负责运行4个worker.js进程(保持numprocs等于或小于您的CPU数量)。numprocs与%(program_name)s_%(process_num)02d的process_name表达式相结合,将创建四个进程,即wise_worker_00、wise_worker.01、wise_worker_02和wise_worker_03。

验证它们是否都在使用运行

$sudo systemctl status supervisor      

$sudo service supervisor status

最新更新