RabbitMQ在消息delivery_info中缺少通道引用

时间:2015-02-26 11:44:58

标签: php rabbitmq amqp php-amqplib

我目前正在使用basic_get从rabbitMQ获取消息后实现一些逻辑,而不会自动发送ack来接收消息。

根据教程here(消息确认部分),我无法在msg中找到频道参考,并发送上述链接中提到的ack:

$msg->delivery_info['channel']->basic_ack($msg->delivery_info['delivery_tag']);

那是因为在我的msg传递信息数组中没有这样的东西 我想知道它是如何失踪的。

修改:基本获取的代码段

  $msg = $this->channel->basic_get($this->queueName, false);  

这是我的消息的var_dump :(黄色部分)
ampq message L

2 个答案:

答案 0 :(得分:1)

根据AMQP规范get-okbasic-get的返回值不包含频道,与basic-deliver的情况相反,后者在消息以basic-consume开头的消费者到达。

因此库行为是正确的。

请参阅https://github.com/videlalvaro/php-amqplib/blob/master/PhpAmqpLib/Channel/AMQPChannel.php#L1022

VS

https://github.com/videlalvaro/php-amqplib/blob/master/PhpAmqpLib/Channel/AMQPChannel.php#L956

答案 1 :(得分:0)

当使用basic_get(似乎不鼓励使用basic_consume)时,尝试使用delivery_tag直接从频道中获取消息

$这 - >通道 - > basic_ack($ MSG-> delivery_info [' delivery_tag']);