【问题标题】:Symfony RabbitMQ: run many consumers in consoleSymfony RabbitMQ:在控制台中运行许多消费者
【发布时间】:2017-06-12 14:35:15
【问题描述】:

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

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

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

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

请举个例子就好了。谢谢!

【问题讨论】:

  • 当您想要构建异步通信时,消息总线可能是 MOA 的不错选择。这是一篇关于如何连接不同 PHP 应用程序的文章blog.forma-pro.com/…

标签: php symfony rabbitmq


【解决方案1】:

不同的消费者会说不同的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

希望有帮助

【讨论】:

  • 每个队列一个进程并不总是好的。它有缺点。如果您有 100 个队列,则至少需要 100 个进程来为它们提供服务。一个典型的 Symfony 应用程序需要 100Mb 内存才能启动,所以你需要 10Gb 内存
  • @MaksimKotlyar 当然,但这是一个设计问题:您不能从多个队列中消费
  • 其实你可以从多个队列消费,但是你必须重新配置应用程序,并且你不能在运行时配置它。解决方案不是那么灵活。我喜欢 EnqueueBundle 的做法。还有更多关于如何处理队列的选项。
  • 嗨@MaksimKotlyar 感谢分享,我不知道这个!
【解决方案2】:

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

可以非常稳定地工作

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-05
    • 1970-01-01
    • 1970-01-01
    • 2014-07-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多