RabbitMq消费者循环重复消费信息
RabbitMq消费者一直循环重复消费信息
消费者消息签收模式为自动时,如果消费端处理出现异常并且被抛出了,该条消息就会一直被重新消费。如果对生产者传递给消费者的实体数据结构进行了更改,而此时队列中还有消费者未使用的数据,那么消费者就无法接收这些数据,进而引发异常。且在未进行配置的情况下,消费者会重复接收这些数据,导致队列堵塞。
解决方法:将requeue设为false:
spring.rabbitmq.listener.simple.default-requeue-rejected=false
另外,在自动签收模式下,如果消费者抛出异常,可以通过spring.rabbitmq.listener.simple.retry.enabled=true 开启消息重新投递,设置最多投递次数(retry.max-attempts默认为3)和投递时间间隔(retry.initial-interval默认1000ms),配置如下:在消息达到最大重新投递次数之后,根据requeue来决定是重回队列还是丢弃消息。
#设置签收模式为手动签收,并行消费数量,最大并行消费数量
spring.rabbitmq.listener.simple.acknowledge-mode=auto
# 一般消费者自动签收模式下可以添加下面配置,用于消费抛出异常后进行消息重新投递设置
#是否开启消费者重试(为false时关闭消费者重试)
spring.rabbitmq.listener.simple.retry.enabled=true
# 最大重试重新投递消息次数
spring.rabbitmq.listener.simple.retry.max-attempts=3
#重试重新投递消息间隔时间(单位毫秒)
spring.rabbitmq.listener.simple.retry.initial-interval=5000ms
#重试次数超过上面的设置之后是否丢弃(消费者listener抛出异常,是否重回队列,默认true:重回队列, false为不重回队列(结合死信交换机))
spring.rabbitmq.listener.simple.default-requeue-rejected=false
还没有评论,来说两句吧...