以下是整理好的 Markdown(.md)格式 文档,你可以直接复制内容到本地保存为 .md 文件(如 DMS派送费用异步处理.md),或导入支持 Markdown 的工具(如 Typora、VS Code、语雀等)中使用:

DMS派送成本费用基于MQ的异步事件处理

第1章 系统介绍

本系统涉及 DMS-Task(定时任务服务)、RocketMQ(消息中间件)、D-BMS(结算系统)三个核心系统,通过 RocketMQ 实现异步事件驱动,完成“订单同步→消息传递→派送费用结算”的全流程闭环。

  • DMS-Task:定时扫描订单状态,将需结算的派送订单以 MQ 消息形式发送。
  • RocketMQ:消息中间件,负责消息的存储、转发,解耦 DMS-Task 与 D-BMS 的直接依赖。
  • D-BMS:消费 MQ 消息,提取派送订单数据并执行结算、分摊等逻辑。

第2章 设计介绍

2.1 异步接口设计流程图

流程步骤如下:

  1. DMS-Task:定时触发「同步订单为派送结算」任务,筛选需结算的订单。
  2. DMS-Task:将需结算的订单信息封装为 MQ 消息,推送至 RocketMQ。
  3. RocketMQ:接收并存储消息,转发给 D-BMS 的 MQ 消费者。
  4. D-BMS:消费 MQ 消息后,依次执行「拉取派送订单」→「结算派送费用」→「定期分摊」,流程结束。

2.2 设计说明

2.2.1 系统交互逻辑

  • DMS-Task → RocketMQ:DMS-Task 定时扫描订单后,通过 MQ 生产消息,将「派送订单结算消息」发送至 RocketMQ,实现异步解耦
  • RocketMQ → D-BMS:RocketMQ 将消息推送给 D-BMS 的 MQ 消费者,D-BMS 消费后触发后续结算、分摊逻辑。

2.2.2 核心功能模块说明

  • DMS-Task「定时同步订单」

    • 提供定时任务能力,扫描待结算的派送订单(如按订单状态、时间范围筛选)。
    • 将订单信息封装为 MQ 消息(包含订单ID、金额、配送信息等)。
  • RocketMQ「消息中间件」

    • 接收 DMS-Task 消息,按 Topic 路由至 D-BMS 消费者,保证消息可靠传输(支持重试、持久化)。
  • D-BMS「消费与结算处理」

    • mq消费者:监听 RocketMQ 目标 Topic,消费消息并触发后续流程。
    • 拉取派送订单详情:根据消息中的订单ID,从 DMS(或其他数据源)拉取完整订单信息。
    • 结算派送费用:按业务规则计算派送费用(如运费、服务费、优惠抵扣等)。
    • 定期分摊:按预设规则(如周期、费用类型)对结算后的费用执行分摊计算,输出分摊结果。

2.3 业务系统事件

系统 事件名称 触发条件 处理逻辑
DMS-Task 定时同步订单 定时任务触发(如每日凌晨) 扫描待结算的派送订单,封装为 MQ 消息并推送至 RocketMQ。
RocketMQ 消息接收与转发 收到 DMS-Task 消息 存储消息,按 Topic 转发至 D-BMS 消费者。
D-BMS mq消费者拉取消息 监听到 RocketMQ 目标 Topic 消息 消费消息,触发后续「拉取订单、结算、分摊」流程。
D-BMS 拉取派送订单详情 消费 MQ 消息后 根据消息中的订单ID,从 DMS 拉取完整派送订单信息。
D-BMS 结算派送费用 拉取订单详情后 按业务规则计算派送费用(如运费、服务费、优惠抵扣等)。
D-BMS 定期分摊 费用结算完成后 按预设规则(如周期、费用类型)对结算后的费用执行分摊计算,输出分摊结果。

2.4 Topic定义

  • Topic名称dms_delivery_cost_settlement(体现“派送费用结算”语义)

  • 消息内容:JSON 格式,包含以下字段:
    json
    {
    “orderId”: “订单ID(如:ORDER_20240901_001)”,
    “deliveryFee”: “派送费金额(如:100.00)”,
    “serviceFee”: “服务费(如:20.00)”,
    “discountAmount”: “优惠金额(如:10.00)”,
    “settlementTime”: “结算时间(如:2024-09-01 10:00:00)”,
    “sourceSystem”: “来源系统(固定为 DMS-Task)”
    }

  • 消息作用:通知 D-BMS 有新批次的派送订单需结算,携带订单核心信息,便于 D-BMS 拉取详情并计算费用。

第3章 注意事项

  1. 消息可靠性

    • DMS-Task 发送 MQ 消息时需配置重试机制(如 RocketMQ 的重试队列),避免网络抖动导致消息丢失。
    • D-BMS 消费消息时需保证幂等性(如基于订单ID做去重),防止重复消费导致数据错误。
  2. 数据一致性

    • D-BMS 拉取订单详情时,需保证与 DMS 数据源的最终一致性(可通过补偿机制或定时对账修复差异)。
    • 费用结算后,D-BMS 分摊结果需同步回 DMS(或生成报表),确保两端数据对齐。
  3. 异常处理

    • DMS-Task 定时任务失败时,需记录日志并触发告警,人工介入排查(如订单扫描异常、MQ 推送失败)。
    • D-BMS 拉取订单详情失败(如 DMS 接口超时),需记录日志并重试,多次失败后触发告警。
  4. 性能与安全

    • MQ 消息量较大时,需评估 RocketMQ 的集群容量与分区策略,避免消息积压。
    • 涉及费用数据的接口(如 MQ 消息传输)需加密(如 HTTPS、消息体加密),防止数据泄露。
  5. 监控与运维

    • 对 DMS-Task 的“定时同步→MQ 发送”、D-BMS 的“MQ 消费→分摊完成”全流程设置监控指标(如耗时、成功率)。
    • 定期检查 RocketMQ 的消息堆积情况,确保消费端处理能力匹配生产端速度。
作者:陆飞  创建时间:2026-03-06 13:17
最后编辑:陆飞  更新时间:2026-04-17 09:34