首先说一下智能仓储系统的场景:智能仓储系统的核心链路涉及多个系统,但是对于数据最终一致性有要求,且部分场景需要补偿机制。

我们需要与诸多二方系统和三方系统对接,比如:

  • 车辆调度系统,可能就会遇到:

    • 车不来:下发调度信息的时候,消息发送失败,导致车辆不来
    • 来错车:下发调度信息的时候,消息乱序,导致来错车
    • 车不走:下发车辆离站消息的时候,消息发送失败,导致车辆不走
  • 与算法服务对接

    • 离线任务下发失败
    • 调用算法计算热度
  • 与外设系统交互,可能会遇到:

    • 灯不亮:

      • 发送亮灯消息的时候,消息发送失败,导致外设系统未接收到消息,灯不亮
      • 外设系统与物理设备交互,调用相关接口失败
    • 灯不灭:

      • 发送灭灯消息的时候,消息发送失败,导致外设系统未接收到消息,灯不灭
      • 外设系统与物理设备交互,调用相关接口失败,灯不灭
    • 亮错灯:

      • 发送亮灯消息的时候,消息乱序,导致外设系统亮灯错乱
  • 与打印系统交互,可能会遇到:

    • 没打印:接口调用失败,导致单据打印失败
  • 与上游系统交互:

    • 各种单据的实操结果未正常反馈上游
      • 出库单按单反馈
      • 出库单按箱反馈
      • 入库单按单反馈
      • 入库单按箱反馈
      • 盘点单按单反馈
      • 库存调整单按单反馈
      • ……
  • 与基础数据系统交互

    • 货架热度计算结果更新失败
    • 料箱热度计算结果更新失败
    • 容器位置更新

这些场景无法使用本地事务实现,因为是分布式系统。有些场景也不能纯用 MQ 的消息事务实现,因为 RocketMQ 事务消息重试机制不灵活。