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