Symfony RabbitMQ:在控制台中运行许多消费者

时间:2017-06-12 14:35:15

标签: php symfony rabbitmq

我想我有一个简单的问题,但我无法回答: 如何一次运行多个消费者? 例如,我有3个消费者

consumers:
    rename_image_folder: ...
    update_customer: ...
    create_protocol: ...

如何立即运行它们?我必须打开3个控制台窗口并运行它们?但在我们的项目中,我们有10个微服务api,每个至少有一个消费者。我该如何使用它?

我相信我,我们有办法如何制作它。例如,我有不同的 routing_key ,我必须为处理队列编写不同的方法(或服务)。也许还有另一种处理它的方法。

如果你申请一个例子,那将是非常好的。谢谢!

2 个答案:

答案 0 :(得分:2)

不同的消费者会说不同的php进程,这意味着你可以扩大增加消费者添加更多消耗队列消息的php进程的数量。

我建议你使用像Supervisord这样的工具来控制php进程的数量并处理进程的状态。

例如,您可以使用php进程数(numprocs元素)配置一个简单的supervisord进程:

[supervisord]
logfile = /tmp/supervisord.log
logfile_maxbytes = 10MB
directory = %(here)s
pidfile = /tmp/supervisord.pid
[program:todo]
command = php /var/www/symfony/bin/console rabbitmq:consumer -w sync
autostart = true
autorestart = true
numproc=5

希望这个帮助

答案 1 :(得分:1)

您需要使用this one之类的捆绑包并在您的服务器上安装supervisord。该捆绑包将处理从您的rabbitmq设置创建supervisord配置文件,让您的不同消费者自动生存。 我已经使用此捆绑包和php-amqplib/rabbitmq-bundle

非常稳定地工作了