docs(architecture): 去除跨文件复述与悬空承诺

- 删防御性声明、旧系统背景、实现细节
- 删 OPS-1/OPS-2 逐字复述,留 OPS-4 交接机制
- 删"出站的后半程"整段(与 US-09 重复)
- requirements US-07 表格"直接处理"改为对比点
- specification US-13 联动 AC5 删除
This commit is contained in:
windyboy
2026-09-20 07:59:05 +08:00
parent aef7b00104
commit 3e64228c3d
3 changed files with 8 additions and 12 deletions
+6 -10
View File
@@ -1,12 +1,12 @@
# 架构
本文写架构约束与归属,不代表能力已实现;上线与切流的操作步骤另立规程。旧版报文的格式兼容以 [SIS 接口规范](legacy/SIS_AODB_RMS-V0.1.md) 和 [XSD](legacy/unisysaodbsis.xsd) 为依据。
本文写架构约束与归属旧版报文的格式兼容以 [SIS 接口规范](legacy/SIS_AODB_RMS-V0.1.md) 和 [XSD](legacy/unisysaodbsis.xsd) 为依据。
## 1. 系统定位与范围
msgexchange-v2 是 OMMS H5 查询系统的消息网关,替换旧版 `msgexchange-api`收取 CIIMS adapter 信箱中 AODB 下发的 XML 报文:航班动态写入业务数据库、写 Redis 投影供页面查询,并经 Kafka 通知运营航班显示界面;静态参考数据(机场、航空公司、机型、机位等 13 类基础数据与资源状态)写入独立数据表
msgexchange-v2 替换旧版 `msgexchange-api`是 OMMS H5 查询系统的消息网关
功能需求是 [requirements.md](requirements.md) 的十四条用户故事(采集、处理、投递、查询、维护,`US-01``US-14`),运行需求是四条验收(单实例、可观测、测试隔离、切换回退,`OPS-1``OPS-4`。不生成航班/业务数据类报文,不替代 CIIMS/AODB,不调用 admin-api;完整非目标见同文件「范围与非目标」。
功能需求是 [requirements.md](requirements.md) 的十四条用户故事(采集、处理、投递、查询、维护,`US-01``US-14`),运行需求是四条验收(单实例、可观测、测试隔离、切换回退,`OPS-1``OPS-4`);完整非目标见同文件「范围与非目标」。
- **主要入口**:轮询共享 MySQL 入站表 `CMINMSGS`,只取处理时间为空的行,按编号升序、每批有上限(`US-01``INV-1`)。
- **兼容入口**`POST /cminmsgs/send` 供联调工具把报文写进信箱,与上游投递走同一条处理路径;返回的编号只表示已进信箱,不代表已处理或下游已收到(`US-02`)。
@@ -16,8 +16,6 @@ msgexchange-v2 是 OMMS H5 查询系统的消息网关,替换旧版 `msgexchan
- **权威**:航班当前态的权威是自有 PostgreSQL(`FLIGHT_SCHD`、资源明细表、`FLIGHT_ROUTE_POINT`);信箱、Redis、Kafka、展示视图都不是(`INV-5`)。
- **航班历史**:已结束航班先写入 Elasticsearch 历史库,成功后才从实时数据删除(`US-14``D1`)。
测试环境用 PostgreSQL;生产环境用 PostgreSQL 还是 Oracle 11g 尚未确定,Oracle 适配验证通过前不作支持承诺(生产库选型见 `Q14`)。
## 2. 总体架构
```text
@@ -41,9 +39,9 @@ delivery 投递 jobs 作业:回填 / 出站重试 / 历史清理 /
四组线程在同一进程、互不调用,协作只经自有 PG 的持久记录交接;HTTP 接口走事件循环,不占这四组线程。重启后各段从记录接着做,不依赖内存进度(`US-01` AC4、`US-03` AC3、`US-10` AC2)。
线程之间不加锁,靠幂等写入:收报按信箱编号只登记一次(`US-01` AC2)、回填只写空标记(`INV-2`)、记录清理只删已回填且超过保留期的行(`US-11`;发生竞争时后到的操作复查状态并重试。主泵与航班历史清理对实时航班表的互斥是实现手段,用以落实「正在被消息处理的航班跳过」(`US-14` AC4
线程之间不加锁,靠幂等写入:收报按信箱编号只登记一次(`US-01` AC2)、回填只写空标记(`INV-2`)、记录清理只删已回填且超过保留期的行(`US-11`)。
运行边界:同一时刻只允许一个实例处理消息(`OPS-1`);切换与回退以信箱处理标记交接,本系统内部处理回填进度保存在自有 PG 的 `PROC_STATE`,停旧启新时未处理的消息由旧系统继续(`OPS-4`);积压、处理失败、投递失败、回填失败各有指标与告警(`OPS-2`)。
运行边界:切换与回退以信箱处理标记交接,内部处理回填进度保存在自有 PG 的 `PROC_STATE``OPS-4`)。
技术栈:Kotlin + JDK 25、Micronaut 编译期依赖注入、JDBC 持久化;数据库变更由 Flyway 管理,只作用于自有 PostgreSQL。依赖版本见 `build.gradle.kts`
@@ -76,12 +74,10 @@ delivery 投递 jobs 作业:回填 / 出站重试 / 历史清理 /
| 类别 | 与主干的差异 | 完成判据 | 失败时 |
|---|---|---|---|
| 日计划(`DNLD`/`RESP`) | 第 3 步改为每批一个事务,第 5 步在整包完成后 | 整包成功,含 Redis 刷新(`US-07` AC4/AC5) | 不标记已处理,下轮整包重处理(`US-07` AC4 |
| 静态参考数据 | 无第 4 步;一个事务完成落库、终态与回填意图 | 该类落库成功(`US-13` AC1/AC5 | 校验不过整类不动,其他类照常(`US-13` AC2 |
| 静态参考数据 | 无第 4 步;一个事务完成落库、终态与回填意图 | 该类落库成功(`US-13` AC1) | 校验不过整类不动,其他类照常(`US-13` AC2 |
| 出站请求 | 不走收报队列:登记新请求并作废同子类型旧请求;`RQRD``RQFD` 各自最多一条在途,后续请求待前一条结案再写入 `COUTMSGS` | 请求已写入信箱(`US-09` AC1 | `jobs``REQ_TRACK` 重试仍有效且确认未落信的请求;写入结果不明时记录并告警,不直接重发;交付承诺只到落信(`C-4` |
| 航班历史清理(作业) | 不走消息队列:历史写入成功后物理删除 | 实时数据已删(`US-14` AC3) | 历史写不成功不删,下轮重来(`US-14` AC3 |
出站的后半程:应答按报文类型匹配等待中的请求,发错或迟到的不更新数据、记录后跳过;超过时限未等到应答,标记超时;`EROR` 定位到本系统发出的请求,标记失败并告警(`US-09`)。
## 5. 必须保持的约束
以下约束不得违反: