Получение неподтвержденных сообщений потребителей в RabbitMQ

Я пытаюсь изящно завершить процесс, который использует сообщения от RabbitMQ. Я знаю, что могу использовать Channel.cancel, чтобы остановить RabbitMQ от отправки каких-либо новых сообщений процессу, но мне также нужно иметь дело с любыми ожидающими, неподтвержденными сообщениями. Я мог бы просто вызвать Channel.nackAll и повторно поставить их все в очередь, но было бы лучше, если бы я мог подождать, пока все ожидающие сообщения — сообщения, которые были потреблены, но еще не подтверждены/не подтверждены.

Есть идеи, как этого добиться?


person Fabis    schedule 11.03.2020    source источник


Ответы (1)


  • Отменить потребителя
  • Подтвердите сообщения, над которыми вы сейчас «работаете», когда работа будет выполнена
  • Когда все вышеперечисленное будет сделано, закройте каналы и соединения. Все, что не подтверждено, будет повторно поставлено в очередь RabbitMQ.

ПРИМЕЧАНИЕ. команда RabbitMQ отслеживает rabbitmq-users список рассылки и лишь иногда отвечает на вопросы в StackOverflow.

person Luke Bakken    schedule 15.03.2020
comment
Как я узнаю, что все ожидающие работы выполнены? Есть ли способ подключиться, когда это произойдет? - person Fabis; 15.03.2020
comment
Ваше приложение работает с каждым сообщением. Вот что я имею в виду под незавершенной работой. - person Luke Bakken; 16.03.2020
comment
Да, но как я смогу узнать, когда вся незавершенная работа будет выполнена? Насколько мне известно, в RabbitMQ нет подсчета текущих потребляемых, но еще не подтвержденных сообщений. Я мог бы отслеживать входящие/обработанные сообщения вручную в коде, но кажется, что это может быть немного хрупким (одно из сообщений по какой-то причине пропускается, и счет отключен на все время процесса). - person Fabis; 17.03.2020
comment
Это зависит от вашего приложения, чтобы отслеживать. Вы должны установить значение QoS/prefetch, чтобы знать максимальное количество неподтвержденных сообщений, которые RabbitMQ разрешает на канале вашего потребителя. - person Luke Bakken; 17.03.2020
comment
Я предполагаю, что это отвечает на мой вопрос - RabbitMQ не предлагает способа получить (по крайней мере, количество) полученных в настоящее время, но еще не подтвержденных/неподтвержденных сообщений. - person Fabis; 18.03.2020