2017-06-12 137 views
2

我认为我有一个简单的问题,但我无法回答: 我该如何一次运行多个消费者? 比如我有3名消费者Symfony RabbitMQ:在控制台上运行很多消费者

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

,我怎么能同时运行呢?我必须打开3个控制台窗口并运行它们?但在我们的项目中,我们有10个微服务API,每个微服务API至少有一个消费者。我如何使用它?

我相信,我认为我们有办法如何做到这一点。例如,我有不同的routing_key,我必须编写不同的方法(或服务)来处理队列。也许有另一种方式来处理它。

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

+0

消息总线可能是MOA的一个不错的选择,当你想建立一个异步通信。以下是关于如何连接不同的PHP应用程序的文章https://blog.forma-pro.com/message-bus-to-every-php-application-42a7d3fbb30b –

回答

1

您需要使用捆绑像this one和安装supervisord在你的服务器上。该捆绑包将处理从您的rabbitmq设置创建supervisord配置文件,让您的不同客户自动保持活动状态。 我已经得到它非常稳定的工作包和php-amqplib/rabbitmq-bundle

+0

非常感谢!我今天会检查一下! –

1

不同的消费会说不同的PHP的过程,这意味着你可以扩展增加了消耗的队列的消息消费者增加更多的PHP程序的数量。

我建议你为了控制PHP程序的数量和采取的过程的状态小心使用像Supervisord的工具。

作为例子,你可以配置一个简单的supervisord过程与PHP程序的次数(numprocs元素):

[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 

希望这有助于

+0

每个队列的进程一直都不好。它有缺点。如果你100个队列,你需要100个进程来至少为他们提供全部服务。一个典型的Symfony应用需要100Mb的内存刚刚开始,所以你需要的10Gb内存 –

+0

@MaksimKotlyar肯定,但它是一个设计问题:你不能从多个队列 – Matteo

+0

消耗其实,你可以从多个队列消费,但你必须重新配置应用程序,并且无法在运行时配置它。解决方案不够灵活。我喜欢EnqueueBundle是如何做到的。有关如何处理队列的更多选项。 –