rabbitmq消费端auto和manual区别;处理mq的requeue
Posted 好大的月亮
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了rabbitmq消费端auto和manual区别;处理mq的requeue相关的知识,希望对你有一定的参考价值。
概述
auto
和manual
区别其实就如字面意思一般,auto
代表自动确认消息,只要消费者的方法执行完了,就自动告诉mq
当前消息确认.manual
则是需要手动通知mq
。不需要想的很复杂就是这么直接.
auto自动确认
- 消息成功被消费,没有抛出异常,则自动确认,回复ack。
- 当抛出
ImmediateAcknowledgeAmqpException
异常,则视为成功消费,确认该消息。 - 当抛出
AmqpRejectAndDontRequeueException
异常的时候,则消息会被拒绝丢弃,并且不会重新入队。 - 其他的异常,则消息会被拒绝,且
requeue = true
(默认就是true)时会重新入队
manual人工确认
无论有没有异常,标准只有是否主动调用basicAck()、basicNack()
等方法,没有调用则一直阻塞.
因此有异常时,(有重试就重试),抛出异常后,没有调用时,还是会一直阻塞。即使是auto
模式的那两个特殊的异常,在manual
中都是一样的,不会有特殊处理.
关于default-requeue-rejected(重新入队)属性的优先级
server:
port: 9009
spring:
rabbitmq:
host: xxxx
port: 5672
username: xxxx
password: xxxx
virtual-host: /fchan
listener:
simple:
#(默认值为true)在消费者出现异常时是否丢弃该消息还是重新入队,true:重新入队,入队后在队首
#default-requeue-rejected: true
#qos = concurrency * prefetch
#concurrency: 1
#max-concurrency: 5
#qos = concurrency * prefetch
prefetch: 2
#acknowledge-mode: auto
- 最高优先级:
AmqpRejectAndDontRequeueException
处理的requeue = false
(剩下那个特殊异常视为成功,与此处无关),抛出这个异常的时候直接就是拒绝并且丢弃。 - 其次是手动确认时
basicNack()
的boolean requeue
参数 - 接着便是这个参数定义的重新入队
default-requeue-rejected
auto
模式中,处理其他异常时,拒绝消息,此时如果配置了default-requeue-rejected=false
则会丢弃消息
以上是关于rabbitmq消费端auto和manual区别;处理mq的requeue的主要内容,如果未能解决你的问题,请参考以下文章