Как добиться хотя бы раз гарантии доставки с RabbitMQ и Spring AMQP без использования транзакций? - PullRequest
0 голосов
/ 13 июня 2018

В этом документе https://www.rabbitmq.com/reliability.html говорится, что с RabbitMQ можно добиться хотя бы раз гарантии, не используя транзакции.Проблема с транзакциями заключается в том, что они медленные, поэтому пропускная способность резко падает (см. Разделы Подтверждения издателя в https://www.rabbitmq.com/confirms.html).. Можно использовать Подтверждения потребителя и Подтверждения издателя.

С другой стороны, SpringAMQP может автоматически обрабатывать Подтверждения потребителя, используя эту конфигурацию:

spring.rabbitmq.listener.acknowledgeMode=AUTO

Для издателя Подтверждает, что это конфигурация:

spring.rabbitmq.publisherConfirms=true

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

1 Ответ

0 голосов
/ 13 июня 2018

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

См. документацию .

Для подтверждений издателя (akaПодтверждение издателя), шаблон требует CachingConnectionFactory, у которого свойство publisherConfirms имеет значение true.Подтверждения отправляются клиенту, когда он регистрирует RabbitTemplate.ConfirmCallback, вызывая setConfirmCallback (обратный вызов ConfirmCallback).Обратный вызов должен реализовывать этот метод:

void confirm(CorrelationData correlationData, boolean ack, String cause);

CorrelationData - это объект, предоставленный клиентом при отправке исходного сообщения.Ack верно для ack и ложно для nack.Для nacks причина может содержать причину nack, если она доступна при создании nack.Например, при отправке сообщения на несуществующий обмен.В этом случае брокер закрывает канал;причина закрытия включена в причину.Причина была добавлена ​​в версии 1.4.

RabbitTemplate поддерживает только один ConfirmCallback.

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