Гарантированная доставка с Rabbitmq клиентским Java API - PullRequest
2 голосов
/ 12 октября 2010

Я хотел бы знать, как лучше всего общаться ошибки (например, сбой RabbitMQ или проблемы с сетью) с Java API.

Мы используем метод Channel.basicPublish(...), и мы хотели бы гарантия доставки для каждого сообщения, которое мы отправляем брокеру.

Если быть более точным, есть ли механизм публикации в Java-клиенте? API (перед отправкой сообщения на шину), который обеспечивает сообщение будет доставлено (или обратный вызов вызывается, когда шина отправляет IOException) или мы должны реализовать этот процесс?

Как бы ты это сделал?

Ответы [ 2 ]

2 голосов
/ 13 мая 2019

Вы можете подписаться на свои собственные сообщения в брокере, что кажется слишком сложным.Как указывает этот ответ Саймона Макмаллена в списке рассылки RabbitMQ (перенесен из вопроса ОП в этот ответ) транзакции являются опцией .:

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

Однако, поскольку в этом ответе доступны некоторые новые опции в виде Lightweight Publisherподтверждает .Официальная документация содержит примеры как подхода «тяжелой» транзакции, так и более новый поточный издатель подтверждает:

https://www.rabbitmq.com/blog/2011/02/10/introducing-publisher-confirms/

0 голосов
/ 03 декабря 2010

В RabbitMQ есть метод channel.basicAck (), который даст вам подтверждение сообщения.

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