Сообщения делают persistent (deliveryMode=2), очереди durable. Publisher confirms: канал в режиме confirm, после Publish ждут Confirm; при потере сообщения можно ретраить. В Go включают confirms: ch.Confirm(false), после Publish слушают ch.NotifyPublish. При падении брокера неподтвержденные сообщения теряются; повторная отправка на стороне приложения при таймауте confirm.
ch.Confirm(false)
ch.Publish(...)
select {
case confirm := <-ch.NotifyPublish(...):
if !confirm.Ack { /* retry */ }
}