我目前正在使用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 :(黄色部分)
L
答案 0 :(得分:1)
根据AMQP规范get-ok
,basic-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']);