refactor(storage): ACM2-12 落地——自有 PostgreSQL 全内部状态,共享 MySQL 仅信箱
按 ACM2-12 定案把仓库存储口径从"MySQL 六辅助表"推进到最终形态: - 迁移:删除 MySQL V2.0.0 六表脚本,新增自有 PG V1.0.0 (PROC_STATE/MSG_EVENT/PUMP_JOB/REQ_TRACK/REF_MASTER,PG 方言,REQ_TRACK.COUTMSGS_ID 按 U18 修为 BIGINT;FLIGHT_STATE 阶段 B 缓做不建表)。 - 配置:datasources.default = 自有 PostgreSQL(enabled=false 待 U05); 移除 datasources.reference/flyway.reference;新增 mailbox.shared-mysql(共享信箱, 仅 DML,不建表);test profile 显式启用 H2 内存 datasource。 - 接口/注释:Repositories KDoc 按 ACM2-12 归属(自有 PG / 信箱封装 / gen→Redis 占位 / FLIGHT_STATE 缓做);InboxService、Pump 事务模型注释对正 (信箱外部副作用 + PG 本地事务 + 回填最终一致)。 - 文档:architecture §1/§2/§3/§4/§5(D1/D2)/§6/§7/§8、design §1/§2/§3.1/§3.4/§3.5/§6/§9、 README 全部按 ACM2-12 收口(自有 PG + 共享信箱 + Redis 动态/gen + 阶段 B 缓做)。 验证:37 测试全绿;dev stub 冒烟仍可启动、/health UP、收报 200。 信箱适配层(CminmsgMailbox/OutboxMailbox)、gen→Redis Lua、作业窗口语义、影子重设计 属 ACM2-12 Checks ②③④⑤(U05/U09 批次)。
This commit is contained in:
@@ -1,9 +1,10 @@
|
||||
# msgexchange-v2(新一代消息交换服务)
|
||||
|
||||
依据 **ACMA-8 v4 综合架构**(单写者严格 FIFO 管道 + 两阶段权威)与 **ACMA-6 技术选型**
|
||||
(Micronaut 5.1 + Kotlin 2.3)搭建的新一代消息交换服务工程。本仓库独立于 legacy
|
||||
`msgexchange-api`(Java 8 / Spring Boot 1.5 / Maven)——过渡期两套系统并存(影子对拍→
|
||||
切流→旧仓库冻结),legacy 维护不受本仓库影响。
|
||||
依据 **ACMA-8 v4 综合架构**(单写者严格 FIFO 管道)与 **ACMA-6 技术选型**
|
||||
(Micronaut 5.1 + Kotlin 2.3)搭建的新一代消息交换服务工程;**存储边界与阶段 B 按
|
||||
ACM2-11/ACM2-12 定案**(自有 PostgreSQL 全内部状态 + 共享 MySQL 仅信箱 + Redis 动态/gen,
|
||||
阶段 B 缓做)。本仓库独立于 legacy `msgexchange-api`(Java 8 / Spring Boot 1.5 / Maven)——
|
||||
过渡期两套系统并存(影子对拍→切流→旧仓库冻结),legacy 维护不受本仓库影响。
|
||||
|
||||
> **JDK 口径实测修正**:Micronaut 5.1 系构件(如 micronaut-http-server-netty:5.1.10)
|
||||
> 要求 JVM 25+,计划原定 JDK 21 不可行;工程已按 **JDK 25** 配置(ACMA-9 记录)。
|
||||
@@ -12,7 +13,7 @@
|
||||
|
||||
| 包 | 职责 | 对应 ACMA-8 |
|
||||
|---|---|---|
|
||||
| `ingress/` | Ingress & Inbox:接收事务(事务1),不解析报文 | 流程 1,I3 |
|
||||
| `ingress/` | Ingress & Inbox:收报(共享信箱落信 → 自有 PG 入队,ACM2-12),不解析报文 | 流程 1,I3 |
|
||||
| `processing/` | Processing 主泵:严格 FIFO 领取、identity 绑定、纯函数决策、事务2 | 流程 2/4,I1/I2/I5 |
|
||||
| `delivery/` | Delivery & Projection:每 target 严格 FIFO 投递、schd 聚合 | 流程 3 |
|
||||
| `reference/` | Reference & Query:21 类同步 + 15 类请求状态机 | 流程 6 |
|
||||
@@ -25,13 +26,14 @@
|
||||
|
||||
- `SIS_AODB_RMS-V0.1.md` + `doc/unisysaodbsis.xsd`:**消息结构唯一事实源**(wire 契约冻结,
|
||||
自 legacy 仓库复制以自包含;codec 实装依据,ACM2-2/ACM2-3)。
|
||||
- `db/migration/V2.0.0__aux_tables.sql`:六表 DDL(PROC_STATE / MSG_EVENT / REF_DATA /
|
||||
REQ_TRACK / PUMP_JOB / FLIGHT_STATE),与 ACMA-8 v4 数据模型节逐字一致;影子实例在
|
||||
独立 schema 执行同一脚本。**ACM2-11 拆分**:21 类静态主数据迁独立 PostgreSQL 参考库
|
||||
(`datasources.reference`,见 design.md §2);`REF_DATA` 留守 SCHD_GEN 行(流程 4 gen CAS)。
|
||||
- `lua/snapshot_replace.lua`:同一 hash 原子“覆盖新代 + 按代差删”(流程 4,I4/I5)。
|
||||
- `db/migration/V1.0.0__own_pg_pipeline.sql`:**自有 PostgreSQL**(唯一自有库)表结构
|
||||
(PROC_STATE / MSG_EVENT / PUMP_JOB / REQ_TRACK / REF_MASTER,PG 方言),ACM2-12 定案;
|
||||
共享 MySQL(CMINMSGS/COUTMSGS)仅信箱 DML 不建表;快照 gen 与航班动态在 Redis。
|
||||
- `lua/snapshot_replace.lua`:同一 hash 原子“覆盖新代 + 按代差删”(流程 4,I4/I5;
|
||||
随 gen→Redis 协议(U09)扩展版本推进)。
|
||||
- `lua/batch_delete.lua`:3:30 清场批量删除(仅 ES 写成功集,I4)。
|
||||
- `application.yml`:口令全部环境变量外置(零入库);`msgx.phase` 为阶段 A/B 总开关;
|
||||
- `application.yml`:口令全部环境变量外置(零入库);`datasources.default`=自有 PG(enabled=false
|
||||
待 U05)、`mailbox.shared-mysql`=共享信箱;`msgx.phase` 权威口径(A 现役;B 缓做);
|
||||
pipeline 参数 = ACMA-8 参数表初值。
|
||||
|
||||
## 未完成(按计划属于后续阶段,不是本脚手架遗漏)
|
||||
@@ -41,27 +43,28 @@
|
||||
阶段 1 后续项。
|
||||
3. **依赖版本锁定**:`gradle/libs.versions.toml` 中版本为计划口径,需阶段 0
|
||||
「Micronaut×现网 Eureka 互操作冒烟 + logstash + ES REST」通过后固化。
|
||||
4. **仓储实装**:`infra/persistence/Repositories.kt` 目前是接口(Micronaut Data JDBC
|
||||
实装属阶段 1 后续),主泵/调度循环以接口驱动,纯逻辑已抽离可单测。
|
||||
5. **21 类静态主数据参考库**(ACM2-11):独立 PostgreSQL(`datasources.reference` /
|
||||
`StaticRefRepository`)已占位(enabled=false),表结构/迁移/同步实装属阶段 6。
|
||||
4. **自有 PG 数据层实装**(ACM2-12):`infra/persistence/Repositories.kt` 目前是接口
|
||||
(Micronaut Data JDBC on PG + 信箱适配层 CminmsgMailbox/OutboxMailbox 属 U05 批次),
|
||||
主泵/调度循环以接口驱动,纯逻辑已抽离可单测。
|
||||
5. **信箱适配层与共享库边界**(ACM2-12):CMINMSGS 收 / COUTMSGS 出为共享 MySQL 仅 DML
|
||||
(mailbox.shared-mysql 配置段已占位);收报「信箱落信 → PG 入队」与处理回填的
|
||||
外部副作用/补偿模型属 U05 批次。
|
||||
|
||||
## 数据库初始化(U04/R01,务必先读)
|
||||
## 数据库初始化(ACM2-12 口径)
|
||||
|
||||
`db/migration/V2.0.0__aux_tables.sql` **只建六张辅助表**(PROC_STATE / MSG_EVENT / REF_DATA /
|
||||
REQ_TRACK / PUMP_JOB / FLIGHT_STATE),并假定 `CMINMSGS`(及其历史表)等 legacy 旧表已存在——
|
||||
迁移集是「现网 legacy 库的演进」而非「全新库初始化」。因此:
|
||||
**自有 PostgreSQL**(唯一自有库):`db/migration/V1.0.0__own_pg_pipeline.sql` 建
|
||||
PROC_STATE / MSG_EVENT / PUMP_JOB / REQ_TRACK / REF_MASTER(PG 方言)。全新库直接执行即可,
|
||||
无 legacy 前置。
|
||||
|
||||
- **现网/影子演进**:在既有 `cdairport` 库(含 CMINMSGS)上执行即可,Flyway 会补跑 V2.0.0。
|
||||
- **全新空库(本机/CI/演练/灾备重建)**:需先按 legacy 仓库(`airport_chengdu_msgexchange_api`)
|
||||
建好 CMINMSGS/CMINMSGS_HST/COUTMSGS 等旧表(或从现网导出 schema),再启动本服务;否则
|
||||
收报第一句 SQL 即报「表不存在」。影子实例在独立 schema 执行同一脚本时同样先建旧表。
|
||||
- 为什么没有 CMINMSGS 的 V1 迁移:六表之外的旧 schema 归 legacy 仓库维护(冻结期),
|
||||
本仓库不重复声明;若未来要求空库一键初始化,再补 V1 基线快照(见 ACM2-10 U04)。
|
||||
- 21 类静态主数据(航空公司/航线/机位等)走**独立 PostgreSQL 参考库**(ACM2-11):
|
||||
`application.yml` 的 `datasources.reference` 默认 `enabled=false`,阶段 6 实装时置 true
|
||||
并设 `MSGX_REF_DB_URL`(参考库迁移目录 `db/ref-migration`);与业务 MySQL 库(六表+legacy)
|
||||
和 Redis 航班动态互不干扰。
|
||||
**共享 MySQL(cdairport,他人系统库)**:本系统**不建表/schema**,仅信箱 DML——收报写
|
||||
`CMINMSGS`、出站写 `COUTMSGS`(他人读取发送);表结构与保留策略归库方管理。收报前需确认
|
||||
共享库 CMINMSGS 已存在(他人系统提供);本仓库不声明其 schema。
|
||||
|
||||
- **事务模型**:与共享库交互均为外部副作用(ACM2-12)——收报=信箱落信成功(返回
|
||||
CMINMSGS_ID)→ 自有 PG 建 PENDING 入队;处理成功回填 DATE_PROCESSED/STATUS 为最终一致。
|
||||
- **快照 gen**:随航班动态同在 Redis(gen→Redis 协议属 U09,当前为过渡占位)。
|
||||
- **阶段 B(FLIGHT_STATE)**:缓做不落表。
|
||||
- 影子对拍:自有 PG 开独立 schema;共享信箱为单信箱无法双写,影子输入=只读水位/回放口径。
|
||||
|
||||
## 构建
|
||||
|
||||
@@ -97,5 +100,6 @@ MICRONAUT_ENVIRONMENTS=dev ./gradlew run # dev stub 冒烟:内存 stub,无
|
||||
## 关联
|
||||
|
||||
Plane `airport_chengdu_msgexchange_api`(**ACM2 为现行入口**):ACM2-3(综合架构 v4,
|
||||
架构权威)、ACM2-4(脚手架跟踪)、ACM2-10(评审与实施计划 U01–U30);ACMA 系列仅作
|
||||
归档历史/迁移来源(ACMA-8 v4 / ACMA-6 选型 / ACMA-9 JDK 口径在归档中可溯)。
|
||||
架构权威,存储边界按 ACM2-11/12 修订)、ACM2-4(脚手架跟踪)、ACM2-10(评审与实施计划
|
||||
U01–U30)、ACM2-11/12(存储边界与共享信箱决策);ACMA 系列仅作归档历史/迁移来源
|
||||
(ACMA-8 v4 / ACMA-6 选型 / ACMA-9 JDK 口径在归档中可溯)。
|
||||
|
||||
Reference in New Issue
Block a user