需求
背景
- MQ 发送消息失败, 导致依赖MQ的相关业务无法正常处理
- 如: LB 负载连接断开,导致 mq 连接超时,发消息失败
目的
- 重要业务,mq消息需要补发
方案设计
定义需补发的业务级别
-
业务
- 收徒
- 订单
- …
-
方案
- 注册补发业务
- 格式
# MQ 使用需要进行备份,异常补发的业务 MQ_CHECK_JOBS = [ { "title": "收徒奖励 JOB", "exchange": "xxx.topic", "routing_key": "xxxx.success.#", "level": 0, # 业务级别,暂时无用 "queues": ["xx.complete_shoutu_delay"] } ]
- 操作
- 1.重要业务,发送mq前,插入发送日志
- 2.携日志唯一单号,发送至 MQ
- 3.MQ消费者消费消息
- 3.1 先 check 是否是重要业务
- 3.2 记录消息日志
- 3.3 记录成功之后做业务操作
- 异常补发
- 提供补发JOB, 按照天对生产消息记录和消息消息记录进行比对
- 查出未没有消费记录的消息,进行补发
- 实时方案
- 例1:生产者发了,消费者没有消费
- 检查 mq_producter_msg 中的数据
- 带 id 获取消费记录 mq_consumer_msg
- 检查 mq_producter_msg,中的每条数据对应的 queues(注册时关联) 是否有记录
- queues 消费记录完整则已正常消费,否则补发
- 多个消费者要支持重复消费
- 例1:生产者发了,消费者没有消费
- 其他
- MQ 消费者业务处理,应保证可重复接受消息(消息消费日志可以也保证)
- 格式
- 注册补发业务
表设计
mq 补发消息表
<