Гарантирует ли RabbitMQ порядок доставки клиенту подтверждений опубликованных сообщений?

Для издателей, отправивших метод confirm.select, буквальное прочтение брокера RabbitMQ документация предполагает, что ответы с подтверждением сообщений могут быть получены клиентом в порядке, отличном от порядка публикации исходных сообщений.

Может ли кто-нибудь проверить, что это действительно так? Или сообщения всегда подтверждаются в том же порядке, в котором они были получены? Если подтверждения сообщений могут быть получены в другом порядке, какие условия требуются для этого?


person Kevin Sitze    schedule 08.03.2017    source источник
comment
Обратите внимание, что меня не интересует, были ли подтверждения подтверждениями сообщений, а только порядок, в котором они были получены.   -  person Kevin Sitze    schedule 08.03.2017


Ответы (1)


Может ли кто-нибудь проверить, что это действительно так?

Да, сообщения можно было подтверждать в другом порядке

Какие условия необходимы для этого?


Основные правила подтверждения следующие:

  • немаршрутизируемое обязательное или немедленное сообщение подтверждается сразу после basic.return;
  • в противном случае временное сообщение подтверждается в момент постановки в очередь;
  • постоянное сообщение подтверждается, когда оно сохраняется на диске или когда оно используется в каждой очереди.

Итак, возможные причины могут быть:

  1. Рассмотрим случай, когда постоянные сообщения еще не сохраняются на диске, а пересылаются потребителям. Поскольку сообщения обрабатываются асинхронно, разные сообщения могут быть подтверждены потребителями в другом порядке, и, следовательно, порядок подтверждений изменится соответствующим образом.
  2. Проблемы с TCP. Пакеты, опубликованные издателем, не гарантируют, что они достигнут сервера-брокера в том же порядке. Следовательно, издатель не может предполагать, что получит их в том же порядке, в котором они были опубликованы.
person Rahul    schedule 09.03.2017