Почему сообщение может быть потеряно, когда rabbitmq basic.publish вернет ok - PullRequest
0 голосов
/ 08 мая 2018

Из Rabbitmq doc

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

Используя стандарт AMQP 0-9-1, единственный способ гарантировать, что сообщение не будет потеряно, - это использовать транзакции - затем сделать канал транзакционным для каждого сообщения или набора сообщений, опубликовать, зафиксировать.

Интересно, почему публикация-подтверждение или транзакция необходимы для предотвращения потери сообщения при публикации производителя.

Если amqp "basic.publish" называется успешным, API вернет нормально, почему сообщение все еще возможно потеряно?

1 Ответ

0 голосов
/ 11 мая 2018

Этот фрагмент говорит о AMQP 0-9-1. RabbitMQ предлагает расширения для этого протокола, одним из которых является Подтверждение издателя. Издатель подтверждает, что он не является частью самого стандарта AMQP 0-9-1.

Если вы получили «OK» или basic.ack, тогда это Подтверждение издателя. Как только вы получили этот bacic.ack, это означает, что брокер определенно получил сообщение. Но вы все еще можете «потерять» сообщение на этом этапе. Если нет никаких очередей, привязанных к этому обмену, или нет очередей с привязкой, соответствующей сообщению, то брокер отклонит сообщение. Таким образом, хотя вы получили basic.ack, сообщение теперь потеряно.

Поэтому, если вы действительно хотите получить какие-либо гарантии, вам следует использовать Подтверждения издателя в сочетании с установкой флажка Обязательный в сообщении. Если вы используете этот флаг, вы получите ответ basic.return (сопровождаемый basic.ack) от брокера, если он получил сообщение, но не смог направить его на обмен. Ваша заявка может принять соответствующие меры.

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