带有AMQP PHP扩展的RabbitMQ,队列仅返回3项


RabbitMQ with AMQP PHP extension , Queue returning 3 items only

我是RabbitMQ的新手,一直在这个奇怪的问题上。这是我的消费者代码:

<?php
    function processMessage($envelope, $queue) 
    {
        echo $envelope->getBody() . "'n";
    }
    $routing_key = 'newTest.txt';
    $exchange_name = 'newTest.msg';
    $connection = new AMQPConnection();
    if ($connection->connect()) {
        echo "Established a connection to the broker'n";
        $ch = new AMQPChannel($connection);
        $queue = new AMQPQueue($ch);
        $queue->declare();
        try{
            if($queue->bind($exchange_name,$routing_key))
            {
                $queue->consume("processMessage");  
            }
            else
                echo "Could Not Bind";
        }
        catch (Exception $e) {
            echo 'Caught exception: ',  $e->getMessage(), "'n";
        }
    }
    else {
        echo "Cannot connect to the broker";
    }
?>

我从命令行发布:

rabbitmqadmin publish exchange=newTest.msg routing_key=newTest.txt payload='HELLO';

当使用者正在运行时,如果我多次运行命令行publish,那么队列的输出将在3项之后停止。知道发生了什么事吗?

谢谢。

您必须在consumer中确认或拒绝消息。

function processMessage($envelope, $queue) 
{
    echo $envelope->getBody() . "'n";
    $queue->ack($envelope->getDeliveryTag());
}

您还可以使用AMQP_AUTACK自动确认所有收入信息。

            $queue->consume("processMessage", AMQP_AUTOACK);  

默认情况下,通道上的预取计数为3,所以您收到3条消息,然后代理等待客户端确认或拒绝消息。

附言:或者,您可以在php中查看我的消费者和生产者示例的演示源代码。