0

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

根据此处的教程(消息确认部分),我无法在 msg 本身中找到通道引用并像上面链接中提到的那样发送 ack:

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

那是因为在我的消息传递信息数组中没有这样的通道。
我想知道它怎么会丢失。

编辑:基本获取的代码片段

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

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

4

2 回答 2

1

根据 AMQP 规范get-ok,它的返回值basic-get不包括通道,与发生的情况相反,basic-deliver当消息到达以 开头的消费者时使用basic-consume

所以图书馆的行为是正确的。

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

对比

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

于 2015-03-09T17:22:23.833 回答
0

使用 basic_get 时(似乎不鼓励使用 basic_consume 代替),尝试使用 delivery_tag 直接从频道确认消息

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

于 2015-02-26T13:42:02.193 回答