Ack Strategy Table
| Situation | Recommended Action | āĻā§āύ |
|---|---|---|
| Success | Ack | message safe āĻāĻžāĻŦā§ complete |
| Temporary DB timeout | Nack(requeue=true) āĻŦāĻž retry queue | āĻĒāϰ⧠āĻāĻŦāĻžāϰ āĻā§āώā§āĻāĻž āĻāϰāĻž āϝāĻžāĻŦā§ |
| Invalid payload | Nack(requeue=false) + DLQ | endless retry useless |
| Consumer crash before ack | RabbitMQ redelivery āĻāϰāϤ⧠āĻĒāĻžāϰ⧠| reliability āĻŦāĻžā§ā§ |
Successful vs failed processing
Publish
Producer message publish āĻāϰ⧠āĻāĻŦāĻ āϏā§āĻāĻž queue-āϤ⧠stored āĻŦāĻž routed āĻšā§āĨ¤
msgs, err := ch.Consume("orders.queue", "", false, false, false, false, nil)
if err != nil {
log.Fatal(err)
}
for msg := range msgs {
if err := process(msg.Body); err != nil {
_ = msg.Nack(false, true)
continue
}
if err := msg.Ack(false); err != nil {
log.Printf("ack failed: %v", err)
}
}Auto Ack āĻā§āύ production-āĻ risky?
Checkpoint
āύāĻŋāĻā§ āĻāĻ āĻĒā§āϰāĻļā§āύā§āϰ āĻāϤā§āϤāϰ āĻĻāĻžāĻ: 'ack āĻŽāĻžāύ⧠success signal, retry policy āύāĻž' â āĻā§āύ?
- Ack āĻļā§āϧ⧠current message fate finalize āĻāϰā§
- Retry strategy application āĻŦāĻž topology design-āĻāϰ āĻ āĻāĻļ
- Ack/Nack decision business error type-āĻāϰ āĻāĻĒāϰ āύāĻŋāϰā§āĻāϰāĻļā§āϞ