PHP中使用RabbitMQ的confirm模式,发送多条消息会报错

新手上路,请多包涵

首先,一个正常的发送消息多次发送是没问题的:

echo $msg->body . PHP_EOL;
$res = $this->channel->basic_publish($msg, $exchangeName, $routingKey, $mandatory);
data:2020-05-18 09:38:17 , message:5ec1e709a1574
data:2020-05-18 09:38:17 , message:5ec1e709a2a9c
data:2020-05-18 09:38:17 , message:5ec1e709a336b
data:2020-05-18 09:38:17 , message:5ec1e709a3c0b
data:2020-05-18 09:38:17 , message:5ec1e709a4628

之后引入了confirm模式,不管是阻塞等待还是异步回调都会出问题:

echo $msg->body . PHP_EOL;
$this->channel->confirm_select();
$res = $this->channel->basic_publish($msg, $exchangeName, $routingKey, $mandatory);
$this->channel->wait_for_pending_acks();
data:2020-05-18 09:40:02 , message:5ec1e772792a8
data:2020-05-18 09:40:02 , message:5ec1e7727ab3e


  [Exception]
  Server ack'ed unknown delivery_tag "2"
$this->channel->set_ack_handler(function (AMQPMessage $msg) {
    echo "发送成功", $msg->getBody(),$msg->getDeliveryTag(), PHP_EOL;
});
$this->channel->set_nack_handler(function (AMQPMessage $msg) {
    echo "发送失败", $msg->getBody(),$msg->getDeliveryTag(), PHP_EOL;
});
echo $msg->body . PHP_EOL;
$this->channel->confirm_select();
$res = $this->channel->basic_publish($msg, $exchangeName, $routingKey, $mandatory);
$this->channel->wait_for_pending_acks();
data:2020-05-18 09:40:47 , message:5ec1e79f487ca
发送成功data:2020-05-18 09:40:47 , message:5ec1e79f487ca1
data:2020-05-18 09:40:47 , message:5ec1e79f4a7e4


  [Exception]
  Server ack'ed unknown delivery_tag "2"
阅读 1.4k
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题