Как вы синхронно прослушиваете сообщения из очереди RabbitMQ в PHP? - PullRequest
0 голосов
/ 07 марта 2011

Я использую RabbitMQ для реализации очереди рабочих задач для процесса индексатора поиска с использованием расширения PHP AMQP .Мне нужен демон поискового индексатора, чтобы прослушивать сообщения в очереди и использовать их, когда они становятся доступными.

Я вижу два метода потребления контента из очереди:

  • AMQPQueue :: get- не блокирует, так что, вероятно, не то, что мне нужно
  • AMQPQueue :: потребление - кажется многообещающим

Однако использование потребления, кажется, устанавливает потребителя, которого нетудален.Вот PHP:

$opts = array('min' => 1, 'max' => 10, 'ack' => false);
$messages = array();
while (count($messages) or $messages = $q->consume($opts)) {
    $msg = array_pop($messages);
    var_dump($msg);
    // ...Do work here...
    $q->ack($msg['delivery_tag']);
}

И вы можете увидеть, как потребители собираются с помощью rabbitmqctl:

[andrew@localhost ~] rabbitmqctl list_queues name consumers
Listing queues ...
test_queue   3
[andrew@localhost ~] rabbitmqctl list_queues name consumers
Listing queues ...
test_queue   4

Итак, вопрос в том, как правильно связать демон PHP сочередь, такая, что она блокирует, пока ожидает сообщения, чтобы быть доступными, и начинает блокировать / прослушивать снова, когда она закончила работу, связанную с каждым пакетом сообщений?

Ответы [ 2 ]

2 голосов
/ 12 марта 2011

Я не уверен, как расширение PHP Pecl реализует потребителей, но моя библиотека Amqp позволяет вам прослушивать входящие сообщения (т.е. потреблять), вызывая функцию, и существует несколько " стратегий выхода "доступно, если вы не хотите блокировать навсегда. документация доступна здесь , проверьте раздел "Реализация потребителя", и демонстрационный скрипт здесь.

0 голосов
/ 20 июня 2013

потреблять это то, что вы хотите.Он будет блокироваться, пока не получит сообщение.

API сильно изменился с тех пор, как ваш код, поэтому трудно догадаться, что пошло не так.имеет самую последнюю документацию и пример

...