RabbitMQ 中 basic.ack、basic.nack 与 basic.reject 在批量确认、重回队列和消息丢弃上的语义分别是什么?
基础版来源:jd高级工程师Kafka消费者组分区分配重复消费与消息丢失
草稿
答案解析
在 RabbitMQ 中,这三个方法都用于处理手动确认模式下的消息,但语义不同:
basic.ack:表示消息已经被消费者成功处理。multiple=false 时只确认当前 deliveryTag 对应的消息;multiple=true 时会批量确认当前 deliveryTag 之前、且尚未确认的所有消息。它本身不会把消息重新放回队列,也不会丢弃消息。
basic.nack:表示消息处理失败或不希望继续按当前方式处理。它支持批量处理:multiple=false 只处理当前消息,multiple=true 会处理当前 deliveryTag 之前所有尚未确认的消息。通过 requeue 参数决定后续行为:requeue=true 将消息重新放回队列,可能被再次投递;requeue=false 则丢弃消息,如果队列配置了死信交换机,消息通常会进入死信队列。
basic.reject:也是拒绝消息,但只支持处理单条消息,不支持类似 basic.nack 的 multiple 批量参数。通过 requeue
登录后查看完整内容
