批量导出业务异步处理机制流程总结

  1. 整体流程
    当用户调用导出接口(如exportOrdAdmin)时,系统会创建一个事件实例(SdEventInstBean),并将该事件实例保存到数据库中,状态设置为待处理(如"S0N")
    调用eventInstService.expApiWithDownloadInfoForPub()方法
    保存事件实例到数据库
    发送消息到消息队列
    消息消费者监听并处理事件
  2. 如果消息丢失但事件实例已写入数据库的处理机制:
    定时任务补偿机制(业务兜底,扫描未处理的事件)
    状态机机制:
    系统使用状态码管理事件实例生命周期:
    S0N: 新建/待处理
    S0P: 处理中
    S0D: 完成
    S0E: 错误
    幂等性保证
    通过以下方式保证幂等性:
    使用数据库唯一序列生成事件实例ID
    通过状态检查防止重复处理相同任务
  3. 处理流程总结
    当出现"消息未被监听到但事件实例已写入数据库"的情况时,系统通过以下方式处理:
    定时扫描:定时任务定期扫描状态为S0N(待处理)的事件实例
    手动重试:在管理界面提供手动重试功能,可重新发送消息
    状态监控:通过状态码跟踪事件实例处理进度
    异常处理:消息发送失败时更新状态并记录错误信息
    补偿机制:对于长时间未处理的任务,通过补偿机制重新触发处理
    这种方式确保了即使在消息丢失的情况下,系统仍能通过其他途径处理事件实例,保证了系统的可靠性和数据一致性。
posted @ 2025-10-29 16:41  Leo0OO  阅读(6)  评论(0)    收藏  举报