我在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