我正在使用RabbitMQ为使用PHP AMQP extension的搜索索引器进程实施工作任务队列。我需要搜索索引器demon来侦听队列中的消息,并在消息可用时使用它们。你如何在PHP中同步侦听来自RabbitMQ队列的消息?
我看到从队列中消费内容的两种方法:
- AMQPQueue ::让 - 不阻塞,因此,可能不是我追求的
- 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:
[[email protected] ~] rabbitmqctl list_queues name consumers
Listing queues ...
test_queue 3
[[email protected] ~] rabbitmqctl list_queues name consumers
Listing queues ...
test_queue 4
所以,问题是,什么是一个PHP后台程序绑定到队列中,使得它的正确方法在等待消息可用时阻止,并在完成与每个消息批次相关联的工作时再次开始阻止/侦听?
在利益的情况下,我最终切换到魔豆,这是做的工作对我来说非常漂亮。 – Andrew 2011-12-14 18:39:49