以下是整理好的 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 异步接口设计流程图
流程步骤如下:
- DMS-Task:定时触发「同步订单为派送结算」任务,筛选需结算的订单。
- DMS-Task:将需结算的订单信息封装为 MQ 消息,推送至 RocketMQ。
- RocketMQ:接收并存储消息,转发给 D-BMS 的 MQ 消费者。
- 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章 注意事项
消息可靠性:
- DMS-Task 发送 MQ 消息时需配置重试机制(如 RocketMQ 的重试队列),避免网络抖动导致消息丢失。
- D-BMS 消费消息时需保证幂等性(如基于订单ID做去重),防止重复消费导致数据错误。
数据一致性:
- D-BMS 拉取订单详情时,需保证与 DMS 数据源的最终一致性(可通过补偿机制或定时对账修复差异)。
- 费用结算后,D-BMS 分摊结果需同步回 DMS(或生成报表),确保两端数据对齐。
异常处理:
- DMS-Task 定时任务失败时,需记录日志并触发告警,人工介入排查(如订单扫描异常、MQ 推送失败)。
- D-BMS 拉取订单详情失败(如 DMS 接口超时),需记录日志并重试,多次失败后触发告警。
性能与安全:
- MQ 消息量较大时,需评估 RocketMQ 的集群容量与分区策略,避免消息积压。
- 涉及费用数据的接口(如 MQ 消息传输)需加密(如 HTTPS、消息体加密),防止数据泄露。
监控与运维:
- 对 DMS-Task 的“定时同步→MQ 发送”、D-BMS 的“MQ 消费→分摊完成”全流程设置监控指标(如耗时、成功率)。
- 定期检查 RocketMQ 的消息堆积情况,确保消费端处理能力匹配生产端速度。
作者:陆飞 创建时间:2026-03-06 13:17
最后编辑:陆飞 更新时间:2026-04-17 09:34
最后编辑:陆飞 更新时间:2026-04-17 09:34