2015-04-20 21 views
4

閱讀所有郵件創建RabbitMQ的聽衆:無法從RabbitMQ的

$connection = new AMQPConnection(
    $AMQP_config['server'], 
    $AMQP_config['port'], 
    $AMQP_config['user'], 
    $AMQP_config['password'], 
    $AMQP_config['virtual_host'] 
); 

$channel = $connection->channel(); 

$channel->basic_qos(
    null, 
    1, 
    null 
); 

$channel->basic_consume(
    $AMQP_config['queue'], 
    '', 
    false, 
    false, 
    false, 
    false, 
    array($this, 'CallbackResponse') 
); 

while(count($channel->callbacks)) { 
    $channel->wait(); 
} 

$channel->close(); 
$connection->close(); 

public function CallbackResponse(AMQPMessage $msg) 
{ 
    $response = json_decode($msg->body)->acopMessage; 
    if ($response->reqMRef == $this->_request_reference) { 
     $msg->delivery_info['channel']->basic_ack($msg->delivery_info['delivery_tag']); 
    } 
} 

我有我的RabbitMQ服務器5級的消息。但是我只收到一個回調,只有一個進入CallbackResponse()。

我想檢查隊列中的所有消息,找到我發送的消息,讀取它,這樣就會有4條消息。

我做錯了什麼,爲什麼我只收到第一條消息?

使用此:https://github.com/videlalvaro/php-amqplib

+0

任何想法?它可能是什麼? – user2264941

回答

1

Your QoS is set to 1。所以RabbitMQ一次只能發送一條消息。

由於您只會收到您期望的郵件,因此您收到的第一條與您不符的條件仍然不成立。因此,RabbitMQ不會發送新消息。

因此,不匹配的消息必須是unacked and requeued

+0

是的,但如果我像這樣添加: $ msg-> delivery_info ['channel'] - > basic_nack($ msg-> delivery_info ['delivery_tag']); 它仍然讀隊列中的所有消息 – user2264941

+0

你是什麼意思,它仍然讀取隊列中的所有消息? –

+0

Оne連接讀取所有消息,並且沒有任何其他消費者的消息。 – user2264941