我是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中查看我的消费者和生产者示例的演示源代码。