Вопрос проверяет знание надёжной доставки сообщений при сбоях, особенно при падении потребителя RabbitMQ.
Чтобы гарантировать доставку, необходимо использовать подтверждение обработки (ack), отключить авто-подтверждение, и настроить очередь как устойчивую (durable) с персистентными сообщениями. Если потребитель упал до подтверждения — сообщение будет переотправлено другому потребителю.
RabbitMQ позволяет построить надёжную систему доставки сообщений даже при сбоях:
Очередь должна быть durable — сохраняется при перезапуске брокера
Сообщения должны быть persistent:
var properties = channel.CreateBasicProperties();
properties.Persistent = true;Не использовать autoAck = true
После обработки сообщения вручную отправить BasicAck
channel.BasicAck(deliveryTag, false);Если потребитель упал до вызова BasicAck, сообщение остаётся в очереди и будет передано другому потребителю
Настройка DLX (Dead Letter Exchange) помогает отследить сообщения, которые не удаётся доставить
Это поведение соответствует стратегии at-least-once, т.е. сообщение точно будет обработано, но возможны повторы.