我是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';
当消费者正在运行时,如果我多次运行命令行发布,则队列的输出会在3个项目后停止。有什么想法吗?
感谢。
答案 0 :(得分:1)
您必须在消费者中发送acknowledge或reject条消息。
function processMessage($envelope, $queue)
{
echo $envelope->getBody() . "\n";
$queue->ack($envelope->getDeliveryTag());
}
您还可以使用AMQP_AUTOACK自动确认所有收入消息。
$queue->consume("processMessage", AMQP_AUTOACK);
默认情况下,频道上的prefetch count为3,因此您会收到3封邮件,然后经纪人会等待客户端确认或拒绝邮件。
P.S。:另外,您可以在php中查看我的demo sources消费者和制作人示例。