[异常处理]rabbitMQ 消费端异常进入死循环-消费消息时候抛出错误,控制台一直刷
阿里云国内75折 回扣 微信号:monov8 |
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6 |
消费端一直在循环 消费消>报错->消费. 问题点也能想的来,因为默认是自动应答,异常了相当于是没有应答,然后就一直异常重新抛回队列进行投递.
解决方案: 第一种方法: 对可能发生异常的部分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 时候不会出现死循环,就抛出一次异常(如果设置了死信队列,就被送到了死信队列;否则直接扔掉)。 第四种方法:
阿里云国内75折 回扣 微信号:monov8 |
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6 |