RabbitMQ 的消息确认机制?
发布于
一、生产者确认(Publisher Confirm)
- 消息投递到 Exchange 后返回 confirm。
- 消息路由到 Queue(持久化消息持久化到磁盘)后返回 ack。
- 可配合 mandatory 参数,消息不可路由时返回给生产者。
二、消费者确认(Consumer ACK)
- 自动确认(autoAck=true):消息投递给消费者即认为消费成功,可能丢消息。
- 手动确认(autoAck=false):消费者处理完后调用 basicAck/basicNack/basicReject。
三、失败处理
- basicAck:确认成功,消息从队列删除。
- basicNack/reject:拒绝,可选择 requeue=true 重新入队或 false 丢弃/进死信队列。
- 多次 requeue 可能导致消息循环,建议配合死信队列。
四、死信队列
消息被拒绝且 requeue=false、超时、队列满时进入死信队列,便于排查和补偿。