MQ专题之4、MQ专题第4篇:如何确保消息消息至少被成功消费一次?

目录

消息消费的过程

  • step1、从mq中拉取消息

  • step2、执行本地业务

  • step3、将消息从队列中删除

  • step4、继续重复step1

消费失败出现死循环

若step2执行失败,队列会被step2阻塞,step2消费会产生死循环。

采用衰减式消费+人工干预解决消息消费失败的问题

当消息消费失败之后,可以将消息丢到延迟队列,比如第一次失败之后,延迟2秒再次重试,第二次失败了,延迟4秒再次重试。

  1. 1次失败:延迟2秒再次消费
  2. 2次失败:延迟4
  3. 3次失败:延迟8
  4. 4次失败:延迟16
  5. .......
  6. n次失败:延迟2n次方秒

n可以设置一个阈值,比如100次,尝试100次,且都是失败的情况,此时就需要有监控系统触发报警,有人工介入解决了。

消息消费需确保幂等性

消息消费成功了,但是未将其从队列中剔除,会导致消息再次消费,此时需要通过幂等性来确保消息只被成功消费一次。

来源:http://www.itsoku.com/course/10/191
posted @ 2022-04-27 09:39  程序员小明1024  阅读(150)  评论(0编辑  收藏  举报