DMS揽收成本费用基于MQ通知DBMS的异步事件处理文档

第1章 系统介绍

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

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

第2章 设计介绍

2.1 异步接口设计流程图

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_collect_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 的消息堆积情况,确保消费端处理能力匹配生产端速度。

文档信息

  • 文档版本:v1.0.0
  • 创建时间:2026年3月4日
  • 创建人:[陆飞]
作者:陆飞  创建时间:2026-03-04 09:56
最后编辑:陆飞  更新时间:2026-03-04 09:59