RabbitMQ гарантирует обработку мертвых писем - PullRequest
1 голос
/ 25 июня 2019

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

Однако, что происходит, когда сообщение приходит на обмен мертвыми буквами после отказа потребителя вручную? (channel.basicReject, я использую Spring AMQP.)

Могу ли я по-прежнему быть уверен, что в случае, когда исходное сообщение исключено из очереди, которую прослушивает потребитель, и впоследствии происходит сбой сервера RabbitMQ, я в конечном итоге найду сообщение после перезапуска сервера RabbitMQ, в очередях, которые связаны с обменом мертвыми буквами (если бы сообщение прибыло туда)?

Если ответ отрицательный, есть ли способ убедиться, что это так?

1 Ответ

1 голос
/ 26 июня 2019

Как предложил @GaryRussell, я разместил похожий вопрос в rabbitmq-users группе Google.

Вот ответ, который я получил от Даниила Федотова

"Hi,

There is no delivery guarantees in place. Dead lettering does not check if the message was enqueued or saved to disk.
Dead-lettering does not use publisher confirms or any other confirm mechanisms.

It's not that easy to implement reliable dead-lettering from one queue to another and there are plans to address this issue eventually, but it may take a while.

If you want to safely reject messages from the consumer without a risk of losing them - you can publish them from the consumer application manually to the dead-letter queue, wait for the confirmation and then reject."
...