Издатель RabbitMQ подтверждает заказ - PullRequest
0 голосов
/ 16 января 2019

Я пишу обертку вокруг библиотеки .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, было бы слишком поздно.

Есть ли где-нибудь гарантии, где этот сценарий не может произойти?

1 Ответ

0 голосов
/ 17 января 2019

Это ответ из группы Google, упомянутой Алексом в комментариях. По сути, такого сценария не может быть.

Привет

Если вы получаете один Nack для 1, тогда Ack для 5 с множественным = true, это означает, что 2-5 все были успешными.

Если 1 задерживается, но 2-5 нет, вы должны получить 4 множественных = ложных подтверждения с последовательностями 2-5 , тогда подтверждение для 1.

Было бы лучше, если бы в ack-кадрах использовались диапазоны вместо множества флагов, но мы находимся там, где мы есть.

Приветствие Карл

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...