В чем разница между режимом подтверждения издателя и транзакцией в RabbitMQ? - PullRequest
0 голосов
/ 07 октября 2019

Я думаю, что режим подтверждения издателя и транзакция требуют, чтобы брокер подтвердил получение сообщений, тогда почему режим подтверждения издателя считается легкой операцией, которая имеет лучшую пропускную способность, чем транзакция?

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

Так в чем же разница между режимом подтверждения издателя и транзакцией в RabbitMQ и почему Publisher Confirmрежим обеспечивает лучшую производительность?

Ответы [ 2 ]

0 голосов
/ 09 октября 2019

Подтверждение издателя даст вам ответ «да или нет» от брокера, когда вы публикуете сообщение, указывающее, было ли сообщение успешно помещено в очередь во всех связанных очередях (на момент публикации). Подтверждение выдается для каждого сообщения, которое обрабатывает брокер, или (в соответствии со спецификацией) брокер может выдать «пакетное» подтверждение, которое указывает, что все сообщения, кроме указанного в подтверждении, были обработаны. Я лично не знаю, что это делает брокер;Я думаю, что он просто выдает одно подтверждение на сообщение.

Используя эту семантику, допустим, у вас есть 10 сообщений для публикации. Брокер принимает первые 9, но не может принять 10 (возможно, одна из очередей заполнена). Остальные 9 сообщений по-прежнему помещены в очередь.

Транзакционный позволяет отправить «все или ничего». В приведенном выше сценарии, если вы публикуете все 10 сообщений как часть транзакции, но 10-е не удается, вы можете прервать транзакцию, и брокер будет действовать так, как если бы ни одно из сообщений не было опубликовано вообще. Эта возможность достигается за счет производительности ( в соответствии с документацией работает до 250 раз медленнее при работе в транзакционном режиме).

Транзакционные подтверждения также возможны -Вы можете ack несколько сообщений в рамках одной транзакции.

0 голосов
/ 07 октября 2019

Использовать подтверждения издателя.

Недавно мы добавили учебные руководства по Java и .NET для правильного использования подтверждений асинхронного издателя - https://www.rabbitmq.com/tutorials/tutorial-seven-java.html


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

...