rabbitmq 如何在rabbit MQ中为一个队列附加多个worker

dfddblmv  于 2022-11-08  发布在  RabbitMQ
关注(0)|答案(2)|浏览(250)

我在Rabbit MQ中使用基于交换的模式。
生成方--〉交换--〉队列--〉使用方1
如何运行多个使用者(C1、C2、C3等),以实现负载平衡和使用者的可伸缩性。
是否可以根据用途运行./worker.js两次三次?

eit6fx6z

eit6fx6z1#

是的,应该可以多次运行您的工作线程,因为这将运行您的工作线程的多个示例来监听您的队列以实现您想要的结果。请参考RabbitMQ的tutorial以获得更多信息。具体请参见循环调度部分
引用几个细节:
使用任务队列的优势之一是能够轻松地并行处理工作。如果我们正在积累工作积压,我们可以添加更多的工作线程,这样就可以轻松地进行扩展。您需要打开三个控制台。其中两个将运行worker.js脚本。这些控制台将是我们的两个消费者- C1和C2。

vsmadaxz

vsmadaxz2#

你可能想使用一个像Supervisord这样的“进程监视器/管理器”来管理你的长时间运行的程序C1,最重要的是运行多个程序(C1、C2、C3等...)。只需在您的环境中安装Supervisor即可(本地、VPS、Docker等),然后添加一个配置文件(如下面的示例所示),使其根据需要运行、监控和重启多个worker.js进程,
因此,为您的程序创建一个管理员配置文件,例如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)02 d的process_name运算式结合,会建立4个程序,即wise_worker_00、wise_worker_01、wise_worker_02和wise_worker_03。
使用以下命令验证它们是否都在运行

$sudo systemctl status supervisor

$sudo service supervisor status

相关问题