【问题标题】:How to run multiple, parallel Rabbitmq/AMQP consumers in PHP and/or Symfony2?如何在 PHP 和/或 Symfony2 中运行多个并行的 Rabbitmq/AMQP 消费者?
【发布时间】:2014-02-09 17:41:25
【问题描述】:

我有一个 news-scraper/RSS-aggregation,我通过这个 lib 广播消息。:

https://github.com/videlalvaro/php-amqplib/

我目前有 1 位广播员/制作人和 1 位消费者。

有没有办法让多个消费者通过 PHP 并行运行?我知道 PHP 本身不支持这个。它可以通过 cURL 虚拟完成,但 afaik cURL 主要用于基于网络/Web 的请求。

那么,我有什么方法可以在 PHP 中实现这一点吗? Python/Java当然可以,但是我的水平都不是那么好。

【问题讨论】:

  • 使用线程怎么样? php.net/manual/en/book.pthreads.php
  • 我会尝试检查它,虽然它仍然是一个 alpha 扩展,并且没有很好的文档记录,我曾经读到有一种方法可以在 php 和 Symfony2/Silex 中为 RabbitMQ 和 Symfony2/Silex 运行并行消费者,但我真的找不到这样的链接。

标签: php symfony rabbitmq php-amqp


【解决方案1】:

你真的需要像rabbitmq这样的消息系统吗?恕我直言gearman 是更适合您的任务的解决方案。 Gearman 网站上的Getting starting 是很好的开始。

它允许您并行工作,以进行负载平衡处理

您可以使用supervisor 并行运行和控制多个工作器实例。 Here 是如何安装和配置supervisor的一个很好的例子

我将这两种服务组合用于同一任务 - 我从多个来源汇总 rss,它的工作原理就像一个魅力

$gearman_top
 Queue Name   | Worker Available | Jobs Waiting | Jobs Running
---------------------------------------------------------------
 parseFeed    |               2  |           0  |           0
---------------------------------------------------------------

【讨论】:

  • 听起来Gearman只是在这里替换了与RabbitMQ相同的角色(一个队列),而OP问题的实际答案是使用Supervisor来控制多个工作人员(“消费者”,用MQ的说法)。
  • hm...不太确定我是否处于更改我正在使用的所有内容的阶段,我最好选择 python 多线程解决方案,而不是迁移到 Gearman,顺便说一句: 我知道 gearman(只是名字),但从未尝试过..
最近更新 更多