常用系统数据一致性处理架构

178 阅读1分钟

MQ

丢单原因

  1. 发送端失败未补发 ----发方强制先入库,再发送,再更新状态
  2. 消费端失败未重试---采用MQ机制
  3. 应用启动失败,但是MQ消费线程已启动
  4. 发送方发送成功,但是消费方未能消费到消息

解决方案

发送端失败

简单重试

image.png

虽然依然存在丢数据的风险,但是考虑到发送失败的概率极低,因此只需要用最低的成本进行重试即可,对于特定的业务,如果重试依然失败,可以进行报警,人工处理,如果不能容忍任何的数据丢失,请采用第二种方案

重试系统

重试系统设计架构

image.png

消费方失败

同上,将消费失败的消息转发到自动重试模块即可。

如果使用的rocketMq,还可以依赖其自动重试机制,

业务系统在消费时,只要抛出Exception子类异常,当前消息都会被重新消费,超过配置的最大重试次数后,消息将进入死信队列,死信队列中消息需要人工触发后才能重新消费,注:死信队列当前只保留7天~