MQ专题之4、MQ专题第4篇:如何确保消息消息至少被成功消费一次?
目录
消息消费的过程
step1、从mq中拉取消息
step2、执行本地业务
step3、将消息从队列中删除
- step4、继续重复step1
消费失败出现死循环
若step2执行失败,队列会被step2阻塞,step2消费会产生死循环。
采用衰减式消费+人工干预解决消息消费失败的问题
当消息消费失败之后,可以将消息丢到延迟队列,比如第一次失败之后,延迟2秒再次重试,第二次失败了,延迟4秒再次重试。
第1次失败:延迟2秒再次消费
第2次失败:延迟4秒
第3次失败:延迟8秒
第4次失败:延迟16秒
.......
第n次失败:延迟2的n次方秒
n可以设置一个阈值,比如100次,尝试100次,且都是失败的情况,此时就需要有监控系统触发报警,有人工介入解决了。
消息消费需确保幂等性
消息消费成功了,但是未将其从队列中剔除,会导致消息再次消费,此时需要通过幂等性来确保消息只被成功消费一次。
来源:http://www.itsoku.com/course/10/191