Я пишу обертку вокруг библиотеки .NET RabbitMQ и, насколько я вижу, у меня есть вопрос, на который нет ответа в документации, и я не могу придумать способ экспериментальной проверки. Поэтому мне было интересно, знает ли кто-нибудь ответ.
Документация здесь гласит следующее:
В большинстве случаев RabbitMQ будет подтверждать сообщения для издателей в
в том же порядке, в котором они были опубликованы (это относится к сообщениям, опубликованным на
один канал). Тем не менее, издательские подтверждения выпускаются
асинхронно и может подтвердить одно сообщение или группу
Сообщения. Точный момент получения подтверждения зависит от
режим доставки сообщения (постоянный или временный) и
свойства очереди, в которую было перенаправлено сообщение (см. выше).
То есть разные сообщения можно считать готовыми к
подтверждение в разное время. Это означает, что подтверждения
могут поступить в другом порядке по сравнению с их соответствующими сообщениями.
Заявки не должны зависеть от порядка подтверждений, когда
возможно.
Таким образом, подтверждения могут быть получены не по порядку, с чем я могу справиться. Однако как это работает с флагом Multiple
, который можно использовать?
Представьте себе следующий сценарий: я отправляю сообщения 1, 2, 3, 4 и 5. 1 не удается и 2-5 успешно. Брокер отправляет мне Nack на 1 и один Ack на 5 с Multiple
, установленным в true. Если бы порядок был гарантирован, то я знаю, что сначала получил бы Nack за 1, а затем я знал бы, что Ack был за 2-5. Однако, если бы они могли быть не в порядке, я бы предположил, поскольку у меня не было подтверждения на 1, что Ack был на 1-5, а затем, когда вошел Nack, было бы слишком поздно.
Есть ли где-нибудь гарантии, где этот сценарий не может произойти?