DMS干线运输成本费用基于MQ的异步事件处理

第1章 系统介绍

本系统涉及 DMS-Web、DMS、RocketMQ、D-BMS 四个业务系统,通过 RocketMQ 实现异步事件驱动,完成“干线费用录入→费用处理→消息传递→费用结算与分摊”的全流程闭环。

  • DMS-Web:负责前端干线费用录入,触发后续业务流程。
  • DMS:核心业务逻辑层,处理干线费用确认、分摊、生成批次信息,并通过 MQ 生产消息。
  • RocketMQ:消息中间件,负责消息的存储、转发,解耦 DMS 与 D-BMS 的直接依赖。
  • D-BMS:消费 MQ 消息,拉取并入库干线费用,最终完成定期分摊。

第2章 设计介绍

2.1 异步接口设计流程图

流程步骤如下:

  1. DMS-Web:启动流程,执行「干线费用录入」操作。
  2. DMS:接收录入的费用,依次执行「dms入库干线费用」→「确认分摊」→「生成分摊批次信息」(过程中通过 OpenFeign 调用 D-BMS 查询干线费用,同步校验)→「mq消息生产者」,最终发送「干线费用 topic+批次号」到 RocketMQ。
  3. RocketMQ:接收并存储消息,转发给 D-BMS 的 MQ 消费者。
  4. D-BMS:消费 MQ 消息后,依次执行「拉取干线费用」→「查询dms干线费用」→「入库干线费用信息」→「定期分摊」,流程结束。

2.2 设计说明

2.2.1 系统交互逻辑

  • DMS-Web → DMS:通过后端接口提交干线费用录入请求,触发 DMS 业务处理。
  • DMS → D-BMS(OpenFeign):DMS 生成分摊批次时,通过 OpenFeign 远程调用 D-BMS 的「查询dms干线费用」接口,同步获取干线费用明细(确保批次信息与 D-BMS 数据一致性)。
  • DMS → RocketMQ:DMS 完成批次生成后,通过 MQ 生产消息,将「干线费用 topic+批次号」发送至 RocketMQ,实现异步解耦。
  • RocketMQ → D-BMS:RocketMQ 将消息推送给 D-BMS 的 MQ 消费者,D-BMS 消费后执行后续干线费用拉取、入库、分摊逻辑。

2.2.2 核心功能模块说明

  • DMS-Web「干线费用录入」:提供前端页面,支持用户录入干线成本费用信息(如费用类型、金额、关联单据等),提交后触发 DMS 流程。
  • DMS「业务处理链」
    • 「dms入库干线费用」:将录入的费用存入 DMS 数据库,完成初步持久化。
    • 「确认分摊」:校验费用规则,确认是否可执行分摊逻辑。
    • 「生成分摊批次信息」:生成唯一分摊批次号,记录批次维度信息(如批次时间、关联费用ID等)。
    • 「mq消息生产者」:将批次号与 topic 组装为消息,发送至 RocketMQ。
  • RocketMQ「消息中间件」:接收 DMS 消息,按 topic 路由至 D-BMS 消费者,保证消息可靠传输(支持重试、持久化)。
  • D-BMS「消费与业务处理」
    • 「mq消费者」:监听 RocketMQ 目标 topic,消费消息并触发后续流程。
    • 「拉取干线费用」:根据消息中的批次号,从 DMS 拉取对应干线费用明细(或通过 OpenFeign 同步查询结果)。
    • 「查询dms干线费用」:二次校验 DMS 侧的干线费用信息,确保数据准确性。
    • 「入库干线费用信息」:将拉取的费用信息存入 D-BMS 数据库,完成干线费用的持久化。
    • 「定期分摊」:按预设规则(如周期、费用类型)对入库的费用执行分摊计算,输出分摊结果(可后续同步回 DMS 或生成报表)。

2.3 业务系统事件

系统 事件名称 触发条件 处理逻辑
DMS-Web 干线费用录入 用户在前端提交干线费用录入表单 调用 DMS 接口,传递干线费用信息
DMS dms入库干线费用 接收 DMS-Web 录入的费用 将费用存入 DMS 数据库
DMS 确认分摊 费用入库后 校验费用规则,确认分摊可行性
DMS 生成分摊批次信息 确认分摊通过 生成批次号,记录批次信息;通过 OpenFeign 调用 D-BMS 查询干线费用
DMS mq消息生产者 批次信息生成完成 封装「topic+批次号」消息,发送至 RocketMQ
RocketMQ 消息接收与转发 收到 DMS 消息 存储消息,按 topic 转发至 D-BMS 消费者
D-BMS mq消费者 监听到 RocketMQ 目标 topic消息 消费消息,触发后续拉取、查询、入库、分摊流程
D-BMS 拉取干线费用 消费 MQ 消息后 根据批次号从 DMS 拉取干线费用明细
D-BMS 查询dms干线费用 拉取前或拉取后校验 通过 OpenFeign 调用 DMS 接口,二次确认干线费用信息
D-BMS 入库干线费用信息 拉取并校验费用信息后 将干线费用信息存入 D-BMS 数据库
D-BMS 定期分摊 费用入库完成后 按规则计算分摊结果,完成干线费用分摊逻辑

2.4 Topic定义

  • Topic名称:dms_trunk_cost_fee(可根据实际业务命名,建议体现“干线费用”语义)

  • 消息内容:JSON 格式,包含以下字段:
    json
    {
    “batchNo”: “批次号(如:BATCH_20240901_001)”,
    “createTime”: “批次创建时间(如:2024-09-01 10:00:00)”,
    “feeIds”: “关联的费用ID列表(如:[1001, 1002, …])”,
    “sourceSystem”: “来源系统(固定为 DMS)”
    }

  • 消息作用:通知 D-BMS 有新批次的干线费用需处理,携带批次号与关联费用标识,便于 D-BMS 拉取明细。

第3章 注意事项

  1. 消息可靠性
    • DMS 发送 MQ 消息时需配置重试机制(如 RocketMQ 的重试队列),避免网络抖动导致消息丢失。
    • D-BMS 消费消息时需保证幂等性(如基于批次号做去重),防止重复消费导致数据错误。
  2. 数据一致性
    • DMS 生成批次时通过 OpenFeign 调用 D-BMS 查询费用,需保证双方接口的响应超时时间合理(建议≤5s),避免流程阻塞。
    • 费用录入后,DMS 入库、D-BMS 入库需保证数据最终一致性(可通过补偿机制或定时对账修复差异)。
  3. 异常处理
    • DMS 业务处理链中,若「确认分摊」「生成批次」失败,需回滚费用入库操作,或标记为“失败”并通知前端。
    • D-BMS 拉取/查询费用失败(如 DMS 接口超时),需记录日志并触发告警,人工介入排查。
  4. 性能与安全
    • MQ 消息量较大时,需评估 RocketMQ 的集群容量与分区策略,避免消息积压。
    • 涉及费用数据的接口(如 OpenFeign 调用、MQ 消息传输)需加密(如 HTTPS、消息体加密),防止数据泄露。
  5. 监控与运维
    • 对 DMS 的“干线费用录入→MQ 发送”、D-BMS 的“MQ 消费→分摊完成”全流程设置监控指标(如耗时、成功率)。
    • 定期检查 RocketMQ 的消息堆积情况,确保消费端处理能力匹配生产端速度。
作者:陆飞  创建时间:2026-03-07 15:02
最后编辑:陆飞  更新时间:2026-04-17 09:34