RabbitMQ отсутствует ссылка на канал в сообщении delivery_info

В настоящее время я реализую некоторую логику после получения сообщения от rabbitMQ с использованием basic_get без автоматической отправки подтверждения получения сообщений.

Согласно учебнику Вот (Раздел подтверждения сообщения), я не могу найти ссылку на канал в самой msg и отправить подтверждение, как упомянуто в ссылке выше:

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

Это потому, что в моем массиве информации о доставке сообщений нет такого канала.
Интересно, как могло случиться, что это отсутствует.

редактировать: фрагмент кода основного получения

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

Вот var_dump моего сообщения: (Желтая часть)
усиленное сообщениеL

0

Решение

Согласно спецификации 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

1

Другие решения

При использовании basic_get (который, кажется, не рекомендуется, вместо этого используйте basic_consume), попробуйте получить сообщение напрямую из канала с помощью delivery_tag.

$ This-> channel-> basic_ack ($ msg-> delivery_info [ ‘delivery_tag’]);

0

По вопросам рекламы [email protected]