消费端一直在循环 消费消>报错->消费. 问题点也能想的来,因为默认是自动应答,异常了相当于是没有应答,然后就一直异常重新抛回队列进行投递.
解决方案: 第一种方法: 对可能发生异常的部分try、catch;只要事先将问题catch住,就证明消费端已经将该问题消费掉,然后该消息就不存在于队列中,不会造成无限报错的情况。这里,你可以在catch中写一些业务,把这个出现异常的“消息”记录到数据库或者怎么怎么处理,反正是相当于被消费掉了。 第二种方法: "消费者重试"模式: 在配置文件中配置如下:消费者会尝试消费3次,之后丢弃这个消息,不会进入死循环
listener:
simple:
default-requeue-rejected: true #意思是,消息被拒后(即未消费),重新(true)放入队列
retry:
enabled: true #是否开启消费者重试(为false时关闭消费者重试,这时消费端代码异常会一直重复收到消息)
max-attempts: 3
initial-interval: 5000ms
第三种方法: 只设置 default-requeue-rejected: false #意思是,消息被拒后(即未消费),重新(true)放入队列,当是false 时候不会出现死循环,就抛出一次异常(如果设置了死信队列,就被送到了死信队列;否则直接扔掉)。 第四种方法:
标签:消费,false,队列,异常,rabbitMQ,catch,true,死循环 From: https://blog.51cto.com/u_16250311/7761223