Я использую 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 сочередь, такая, что она блокирует, пока ожидает сообщения, чтобы быть доступными, и начинает блокировать / прослушивать снова, когда она закончила работу, связанную с каждым пакетом сообщений?