我正在使用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