Ack и Nack в RabbitMQ. Как обрабатывать в Go?

Ответ

Сообщение считается обработанным после ack от consumer. Без ack при отключении канал сообщение возвращается в очередь (или в DLQ при настройке). Nack (requeue=true) возвращает в очередь; requeue=false отбрасывает или отправляет в DLQ. В Go: после успешной обработки channel.Ack(deliveryTag, false). При ошибке - Nack с requeue в зависимости от политики (ретраи без requeue через DLQ предпочтительнее при постоянной ошибке).

err := process(msg)
if err != nil {
    ch.Nack(d.Tag, false, false) // в DLQ
    return
}
ch.Ack(d.Tag, false)
🧠Квиз 🏆Лидеры 🎯Собесед. 📖Вопросы 📚База зн.