任务的异步执行通常用两种方式:

  • 消息
  • 定时任务

在分布式场景下,消息,分布式定时任务这类第三方中间件,并不能保证消息或任务一定会被消费或者执行。

我们要做的,就是尽力避免遗漏消息或者任务。

编码过程中,按照以下三步骤进行。

1.落地数据,发送消息

2.消息-定时任务补偿 - 图1

2.消息接收-处理

2.消息-定时任务补偿 - 图2

3.定时任务补偿

  1. @startuml
  2. start
  3. :获取落地数据;
  4. :逻辑处理;
  5. if (处理结果) then (成功)
  6. :删除落地数据;
  7. end
  8. else (失败)
  9. :记录执行次数;
  10. :是否要告警;
  11. endif
  12. stop
  13. @enduml