docs(acm2-75): 澄清需求与架构验收口径
This commit is contained in:
+20
-26
@@ -1,6 +1,6 @@
|
||||
# 架构
|
||||
|
||||
本文写架构约束与归属,不代表能力已实现(可声明性见 [specification.md](specification.md));上线与切流的操作步骤另立规程。历史报文契约以 [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. 系统定位与范围
|
||||
|
||||
@@ -11,15 +11,13 @@ msgexchange-v2 是 OMMS H5 查询系统的消息网关,替换旧版 `msgexchan
|
||||
- **主要入口**:轮询共享 MySQL 入站表 `CMINMSGS`,只取处理标记为空的行,按编号升序、每批有上限(`US-01`;`C-30`)。
|
||||
- **兼容入口**:`POST /cminmsgs/send` 供联调工具把报文写进信箱,与上游投递走同一条处理路径;返回的编号只表示已进信箱,不代表已处理或下游已收到(`US-02`)。
|
||||
- **查询入口**:`GET /all/flights` 返回当前全部动态航班(不含共享航班),读 Redis,与网页客户端同源(`US-12`;`INV-24`)。
|
||||
- **出站**:只向 AODB 发参考数据和日计划两类请求,经共享 MySQL 出站表 `COUTMSGS`,由 CIIMS adapter 消费;只保证请求写入信箱,不保证 AODB 收到(`US-09`;`C-24`)。
|
||||
- **出站**:只向 AODB 发参考数据请求 `RQRD` 和日计划请求 `RQFD`,经共享 MySQL 出站表 `COUTMSGS`,由 CIIMS adapter 消费;只保证请求写入信箱,不保证 AODB 收到(`US-09`;`C-24`)。
|
||||
- **输出**:Kafka 主题 `msg` 发单条航班变更、`schd` 定时发批量最新状态;Redis 存航班投影;静态参考数据表供 admin-api 只读(`US-08`、`US-13`)。
|
||||
- **权威**:航班当前态的权威是自有 PostgreSQL(`FLIGHT_SCHD`、资源明细表、`FLIGHT_ROUTE_POINT`;字段含义见 [implementation.md](implementation.md)「航班域」);信箱、Redis、Kafka、展示视图都不是(`INV-11b`)。
|
||||
- **权威**:航班当前态的权威是自有 PostgreSQL(`FLIGHT_SCHD`、资源明细表、`FLIGHT_ROUTE_POINT`);信箱、Redis、Kafka、展示视图都不是(`INV-11b`)。
|
||||
- **航班历史**:已结束航班先写入 Elasticsearch 历史库,成功后才从实时数据删除(`US-14`;`D1`)。
|
||||
|
||||
测试环境用 PostgreSQL;生产环境用 PostgreSQL 还是 Oracle 11g 尚未确定,Oracle 适配验证通过前不作支持承诺(生产库选型见 `Q1`)。
|
||||
|
||||
监控指标与告警口径见 [reference.md](reference.md)「指标与健康」。
|
||||
|
||||
## 2. 总体架构
|
||||
|
||||
```text
|
||||
@@ -30,22 +28,22 @@ CIIMS adapter(把 AODB 下发的 XML 写入信箱)
|
||||
│
|
||||
▼
|
||||
──────── msgexchange-v2(单活动实例,同进程四组线程) ────────
|
||||
ingress 收报 processing 处理(流程见第 4 节)
|
||||
delivery 投递 jobs 作业:回填 / 历史清理 / 记录清理
|
||||
ingress 收报 processing 处理(流程见「主流程」)
|
||||
delivery 投递 jobs 作业:回填 / 出站重试 / 历史清理 / 记录清理
|
||||
──────────────────────────────────────────────
|
||||
│
|
||||
├─▶ Kafka:msg / schd ── 运营航班显示界面
|
||||
├─▶ Redis:航班查询投影
|
||||
├─▶ 共享 MySQL:COUTMSGS ── 参考数据与日计划请求发 AODB
|
||||
├─▶ Elasticsearch:航班历史
|
||||
└─▶ 自有 PostgreSQL:静态参考数据表 ── admin-api 只读
|
||||
└─▶ 自有 PostgreSQL:航班当前态 / 管道与未映射字段记录 / 静态参考数据 ── admin-api 只读参考数据
|
||||
```
|
||||
|
||||
四组线程在同一进程、互不调用,协作只经自有 PG 的持久记录交接;HTTP 接口走事件循环,不占这四组线程。重启后各段从记录接着做,不依赖内存进度(`US-01` AC4、`US-03` AC3、`US-10` AC2)。
|
||||
|
||||
线程之间不加锁,靠幂等写入:收报按信箱编号只登记一次(`US-01` AC2)、回填只写空标记(`C-5`)、记录清理只删已回填且超过保留期的行(`INV-25`);撞上时后到的一次重试即可。唯一的例外是处理消息的主循环(主泵)与航班历史清理之间要加锁(`INV-18`)。
|
||||
线程之间不加锁,靠幂等写入:收报按信箱编号只登记一次(`US-01` AC2)、回填只写空标记(`C-5`)、记录清理只删已回填且超过保留期的行(`INV-25`);发生竞争时后到的操作复查状态并重试。唯一的例外是处理消息的主循环(主泵)与航班历史清理之间要加锁(`INV-18`)。
|
||||
|
||||
运行边界:同一时刻只允许一个实例处理消息(`OPS-1`);处理进度只有信箱处理标记一处,停旧启新时未处理的消息由旧系统继续(`OPS-4`);积压、处理失败、投递失败、回填失败各有指标与告警(`OPS-2`)。
|
||||
运行边界:同一时刻只允许一个实例处理消息(`OPS-1`);切换与回退以信箱处理标记交接,本系统内部处理和回填进度保存在自有 PG 的 `PROC_STATE`,停旧启新时未处理的消息由旧系统继续(`OPS-4`);积压、处理失败、投递失败、回填失败各有指标与告警(`OPS-2`)。
|
||||
|
||||
技术栈:Kotlin + JDK 25、Micronaut 编译期依赖注入、JDBC 持久化;数据库变更由 Flyway 管理,只作用于自有 PostgreSQL。依赖版本见 `build.gradle.kts`。
|
||||
|
||||
@@ -55,21 +53,19 @@ delivery 投递 jobs 作业:回填 / 历史清理 / 记录清理
|
||||
|---|---|
|
||||
| `ingress` | 轮询信箱、登记入队、兼容入口落信(`US-01`、`US-02`);不解析业务报文。 |
|
||||
| `codec` | XML 解码,区分非法报文与可修复的解码失败(`US-03`)。 |
|
||||
| `processing` | FIFO 调度、业务身份绑定与去重、领域决策与落库(`SCHD`/`FLOP`/`FDEL`/`ADFT`/静态参考数据),航班类写 Redis 投影;决策与回填机制见 [implementation.md](implementation.md)「消息、身份与决策」。 |
|
||||
| `processing` | FIFO 调度、业务身份绑定与去重、领域决策与落库(`SCHD`/`FLOP`/`FDEL`/`ADFT`/静态参考数据),航班类写 Redis 投影,未落到航班当前态的字段写 `UNMAPPED_FIELD`。 |
|
||||
| `delivery` | 读待发事件投 Kafka:按 `FLID` 保序、`schd` 聚合、失败重试(`US-08`;`C-29`)。 |
|
||||
| `jobs` | 回填扫描、航班历史清理,以及 `PROC_STATE`、`MSG_EVENT`、`SCHD_SNAP_LOG`、`REQ_TRACK` 的到期清理;单独线程、不进 FIFO(与主泵的互斥见 `INV-18`),保留期一律见 [reference.md](reference.md)。 |
|
||||
| `jobs` | 回填扫描、出站请求重试、航班历史清理,以及 `PROC_STATE`、`MSG_EVENT`、`SCHD_SNAP_LOG`、`REQ_TRACK` 的到期清理;单独线程、不进 FIFO(与主泵的互斥见 `INV-18`)。 |
|
||||
| `domain` / `config` | 领域状态、事件和决策模型,以及运行参数。 |
|
||||
| `infra` | 仓储(JDBC/stub)、外部适配器(共享信箱、Kafka、Redis、航班历史存储、AODB 出站)、重试、健康检查与日志;对其他模块只暴露接口。 |
|
||||
|
||||
代码入口清单见 [reference.md](reference.md)「模块与代码入口」。
|
||||
|
||||
## 4. 主流程
|
||||
|
||||
航班动态消息走满全链,其余类别只换其中几步:
|
||||
|
||||
1. **收报**:按「处理标记为空」发现信箱行,登记入队(`INV-2b`)。
|
||||
2. **主泵**:按最小未完成 `MSG_ID` 取队头,解码,按业务身份去重(`INV-3`、`INV-9`);非法或不支持的报文无副作用,终态留档(`US-03`)。
|
||||
3. **事务一**:持 `PIPELINE_LOCK`,领域变更与待发事件一起提交(`INV-17b`)。
|
||||
3. **事务一**:持 `PIPELINE_LOCK`,领域变更、未映射字段记录与待发事件一起提交。
|
||||
4. **投影**:写 Redis,写成功才算处理完成(`INV-23`);失败保持未完成、下轮重写投影,业务效果幂等(`US-03` AC3)。
|
||||
5. **事务二**:处理终态与回填意图一起提交。
|
||||
6. **回填**:作业把处理标记写回共享信箱(`US-10`);写不上的记录在案并告警。
|
||||
@@ -81,18 +77,16 @@ delivery 投递 jobs 作业:回填 / 历史清理 / 记录清理
|
||||
|---|---|---|---|
|
||||
| 日计划(`DNLD`/`RESP`) | 第 3 步改为每批一个事务,第 5 步在整包完成后 | 整包成功,含 Redis 刷新(`US-07` AC4/AC5) | 不标记已处理,下轮整包重处理(`US-07` AC4) |
|
||||
| 静态参考数据 | 无第 4 步;一个事务完成落库、终态与回填意图 | 该类落库成功(`US-13` AC2) | 校验不过整类不动,其他类照常(`US-13` AC2) |
|
||||
| 出站请求 | 不走收报队列:登记新请求并作废同类旧请求,写入 `COUTMSGS` | 请求已写入信箱(`US-09` AC1) | 写入失败下轮重试;交付承诺只到落信(`C-24`) |
|
||||
| 出站请求 | 不走收报队列:登记新请求并作废同子类型旧请求;`RQRD` 与 `RQFD` 各自最多一条在途,后续请求待前一条结案再写入 `COUTMSGS` | 请求已写入信箱(`US-09` AC1) | `jobs` 按 `REQ_TRACK` 重试仍有效且确认未落信的请求;写入结果不明时记录并告警,不直接重发;交付承诺只到落信(`C-24`) |
|
||||
| 航班历史清理(作业) | 不走消息队列:历史写入成功后物理删除 | 实时数据已删(`US-14` AC3) | 历史写不成功不删,下轮重来(`US-14` AC3) |
|
||||
|
||||
出站的后半程:应答按报文类型匹配等待中的请求,发错或迟到的不更新数据、记录后跳过;超过时限未等到应答,标记超时;`EROR` 定位到本系统发出的请求,标记失败并告警(`US-09`)。
|
||||
|
||||
机制细节各有归属:扫描谓词、分派与事务边界、回填四结果、保序与 `schd` 聚合见 [implementation.md](implementation.md)。
|
||||
|
||||
## 5. 必须保持的约束
|
||||
|
||||
以下约束不得违反;完整定义与验证方式见 [specification.md](specification.md):
|
||||
以下约束不得违反:
|
||||
|
||||
- 只跑一个实例,航班当前态只有一个写入方:信箱读取不加锁,主泵与历史清理互斥(`OPS-1`、`PRE-5`、`INV-18`)。
|
||||
- 只跑一个实例;主泵处理器写航班当前态,历史清理作物理删除,两者互斥;信箱读取不加锁(`OPS-1`、`PRE-5`、`INV-18`)。
|
||||
- 按顺序处理、只处理一次:每次只取编号最小的未完成消息,重复扫描、失败重处理与兼容入口并发都只登记一次、生效一次(`INV-2b`、`INV-3`、`INV-9`);不丢消息依赖「编号即到达顺序」且编号不复用、不回退(`PRE-2`、`PRE-3`)。
|
||||
- Redis 写成功才算处理完成;查询接口与网页客户端读同一份 Redis,出问题时报错,不返回空列表假装正常(`INV-23`、`INV-24`;`US-05`、`US-06`、`US-12`)。
|
||||
- 日计划快照以 AODB 下发为准:快照里没有的航班删除,未携带的字段清除;增量报文不适用这条(`INV-14b`、`INV-15b`;`US-07`)。
|
||||
@@ -101,26 +95,26 @@ delivery 投递 jobs 作业:回填 / 历史清理 / 记录清理
|
||||
- 静态参考数据一类校验失败只停这一类,其他类照常;空值是「当前没有值」,不是删除(`INV-26`、`INV-27`;`US-13`)。
|
||||
- 航班唯一,版本只进不退:`FLID` 唯一,已写入非空的运营日不可改;每次成功写入版本号加一,重复消息不重复加(`INV-12`、`INV-13`)。
|
||||
|
||||
这些约束是拿速度换来的:一个写入方、一次只推进一条,前一条没处理完,后面都得等。要提速、要多实例,光加线程没有用——得先重新设计消息顺序和数据由谁写,多实例还得补上可靠的互斥保护。
|
||||
这些约束是拿速度换来的:单活动主泵一次只推进一条,前一条没处理完,后面都得等。要提速、要多实例,光加线程没有用——得先重新设计消息顺序和数据由谁写,多实例还得补上可靠的互斥保护。
|
||||
|
||||
## 6. 数据归属与一致性
|
||||
|
||||
| 存储 | 承载内容 | 职责说明 |
|
||||
|---|---|---|
|
||||
| 自有 PostgreSQL | 处理锁 `PIPELINE_LOCK`、消息处理状态与回填意图 `PROC_STATE`、待发事件 `MSG_EVENT`、出站请求跟踪 `REQ_TRACK`、航班当前态 `FLIGHT_SCHD`、资源明细表、`FLIGHT_ROUTE_POINT`、静态参考数据 `REF_MASTER`、日计划快照留痕 `SCHD_SNAP_LOG` | 本系统唯一的业务数据库,也是航班当前态的唯一权威(`INV-11b`);本地事务只发生在这里,事务怎么分段见第 4 节。记录级定义见 [implementation.md](implementation.md)「持久化记录」。 |
|
||||
| 自有 PostgreSQL | 处理锁 `PIPELINE_LOCK`、消息处理状态与回填意图 `PROC_STATE`、待发事件 `MSG_EVENT`、出站请求跟踪 `REQ_TRACK`、航班当前态 `FLIGHT_SCHD`、资源明细表、`FLIGHT_ROUTE_POINT`、未映射字段长期记录表 `UNMAPPED_FIELD`、静态参考数据 `REF_MASTER`、日计划快照留痕 `SCHD_SNAP_LOG` | 本系统唯一的业务数据库,也是航班当前态的唯一权威(`INV-11b`);本地事务只发生在这里,事务怎么分段见「主流程」。`UNMAPPED_FIELD` 不随 `PROC_STATE` 到期清理。 |
|
||||
| Redis | 航班查询投影 | 只作查询,不是权威,也不存处理状态(`INV-11b`);只由本系统写入和移除(`INV-24`),内容来自 PG 当前态;`GET /all/flights` 与网页客户端读的就是它。 |
|
||||
| 共享 MySQL | `CMINMSGS` 入站信箱、`COUTMSGS` 出站信箱 | 信箱归外部系统所有。本系统只读写消息、回写处理标记,不建表、不改表结构、不清数据、不写历史表(`C-14`);原文保留多久、何时清除由库方定(`C-5`~`C-12`、`Q7`、`Q9`)。出站请求写进去就算交付(`C-24`)。 |
|
||||
| 航班历史存储(Elasticsearch) | 已结束航班的历史副本 | 已结束航班写入这里作历史副本;写入确认成功后才删实时数据,写不成一条也不删(`D1`、`INV-28`)。保留期与容量上限未定(`G-FLIGHT-HIST-RETENTION`)。 |
|
||||
|
||||
**PG 的事务只管自己库。** Redis 写没写成、信箱标记写没写上、Kafka 发没发出,PG 事务都管不着;这些步骤各自可重试,重做多少遍结果都一样,重启后从 PG 记录接着走。哪种中断该怎么接续,见 [implementation.md](implementation.md)「中断恢复」。
|
||||
**PG 的事务只管自己库。** Redis 写没写成、信箱标记写没写上、Kafka 发没发出,PG 事务都管不着;这些步骤各自可重试,重做多少遍结果都一样,重启后从 PG 记录接着走。
|
||||
|
||||
对外投递只承诺至少一次(`C-29`):应用重启、待发事件重发都可能让同一条消息多发一次,Kafka 的生产端幂等挡不住这种重复。
|
||||
|
||||
## 7. 关键决策
|
||||
|
||||
只列正文推不出来、仍有约束价值的决策,按 `D1`–`D2` 编号。第三列只给证据与偏差指针;可声明性见 [specification.md](specification.md)。决策不随实现状态增删。
|
||||
只列正文推不出来、仍有约束价值的决策,按 `D1`–`D2` 编号。第三列只给证据与偏差指针;决策不随实现状态增删。
|
||||
|
||||
| 编号 | 决策及理由 | 证据 / 偏差 |
|
||||
|---|---|---|
|
||||
| D1 | 删除实时数据前,下游必须已收到删除事件:FDEL 自带;历史清理先补发再删。历史写入是需求内交付(`US-14`)。 | 红线见 [implementation.md](implementation.md)「生命周期」与 `INV-28` |
|
||||
| D2 | Kafka 生产端同时满足三项:确认级别、幂等、单连接在途条数上限;不许关幂等绕开这条限制。 | 取值见 [reference.md](reference.md) 参数表;投递口径见 `C-29`、`INV-10`(`US-08`) |
|
||||
| D1 | 删除实时数据前,须已登记待发删除事件:FDEL 在航班状态变更事务中登记,Redis 移除成功后才算处理完成;历史清理在历史写入成功后,必要时登记待发删除事件,再物理删除。历史写入是需求内交付(`US-14`)。 | `US-06` AC1、`US-14` AC3 |
|
||||
| D2 | Kafka 生产端同时满足三项:确认级别、幂等、单连接在途条数上限;不许关幂等绕开这条限制。 | 保序目标见 `US-08` AC2 |
|
||||
|
||||
+13
-13
@@ -4,7 +4,7 @@
|
||||
|
||||
- `US-01`~`US-14`(三级标题定义)、`OPS-1`~`OPS-4`(注册表定义)。
|
||||
|
||||
代码入口与参数取值不在本文件:前者见 [reference.md](reference.md)「模块与代码入口」,后者见其参数表。前提、不变量、契约与偏差见 [specification.md](specification.md);机制、航班域与静态参考数据见 [implementation.md](implementation.md)。工程纪律(工具链、测试设施、提交规范)以根 `AGENTS.md` 为唯一出处。
|
||||
本文件只写交付范围与验收口径,不重复代码入口、参数取值和实现机制。
|
||||
|
||||
## 1. 范围与非目标
|
||||
|
||||
@@ -57,8 +57,8 @@
|
||||
**验收标准**
|
||||
|
||||
1. 一次只处理一条消息,取编号最小的未完成消息;处理中的消息不让后面的越过。
|
||||
2. 报文不合法:进死信。报文合法但本系统不支持该类型:跳过留档,按已处理写回标记。原始报文始终保留。
|
||||
3. 处理或提交失败:事务回滚,消息保持未完成,下一轮自动重新处理。
|
||||
2. 报文不合法:进死信。报文合法但本系统不支持该类型:跳过留档,按已处理写回标记。原始报文留在信箱,保留期由库方决定。
|
||||
3. 处理或提交失败:失败的事务回滚,消息保持未完成,下一轮自动重新处理。
|
||||
4. 处理只动本系统数据库;发 Kafka、回填信箱在处理完成之后单独做。
|
||||
5. 错误必须记录到对应消息的处理记录上,不能被外层吞掉。
|
||||
|
||||
@@ -78,9 +78,9 @@
|
||||
|
||||
**验收标准**
|
||||
|
||||
1. 动态消息的子类型共 25 类,处理规则以 AODB 与本系统之间的消息接口规范(SIS)为准;规范里没有但现场会发的 7 类(靠桥、延误、计划机位等),按现有处理逻辑延续。
|
||||
1. SIS 的 FLOP 部分列有 25 个动态消息子类型;现场需处理的 7 类为靠桥(`ABTM`)、延误(`DELY`)、计划机位(`PSDT`)、柜台(`CKDT`)、转盘(`CLDT`)、滑槽(`CHDT`)、登机门(`GTDT`)。其中五类资源分配子类型已包含在上述 25 类中,但 SIS 注明 AODB 发来时 RMS 拒收;靠桥、延误在 SIS 的日计划字段中有定义,不属于上述 25 个 FLOP 子类型。现场报文按现有处理逻辑延续。
|
||||
2. 每个子类型有明确的处理规则:更新哪些字段;报文里字段为空表示清除还是撤销;航班不存在时怎么办。
|
||||
3. 柜台、转盘、滑槽、登机门、机位五类资源分配报文,现场 AODB 实际会发,照常接收处理(消息接口规范写的是相反方向,与 AODB 核对确认);航线路线最多保留 4 条;报文里有但本系统不存的字段,记录在案,不悄悄丢掉。
|
||||
3. 柜台、转盘、滑槽、登机门、机位五类资源分配报文,现场 AODB 实际会发,照常接收处理(消息接口规范写的是相反方向,与 AODB 核对确认);航线路线最多保留 4 条;未落到航班当前态的字段,按信箱编号、路径和出现序号唯一记入自有数据库长期记录,保存原值,不随处理记录到期清理。
|
||||
4. 数据写入 Redis 成功,这条消息才算处理完成;写失败不标记已处理,下轮重新处理。
|
||||
|
||||
### US-06 删除航班(FDEL)
|
||||
@@ -94,7 +94,7 @@
|
||||
|
||||
### US-07 导入日计划(DNLD / RESP)
|
||||
|
||||
**目标**:日计划是 AODB 当前时刻的完整航班列表:AODB 主动下发(DNLD)或本系统请求后应答(RESP),收到即整体替换本地数据——请求日计划就是主动与 AODB 全量同步一次。
|
||||
**目标**:日计划是 AODB 当前时刻的完整航班列表:AODB 主动下发(DNLD)或本系统请求后应答(RESP),收到后分批同步本地数据;整包成功时本地航班当前态与快照一致——请求日计划就是主动与 AODB 全量同步一次。
|
||||
|
||||
| 报文 | 说明 |
|
||||
|---|---|
|
||||
@@ -104,7 +104,7 @@
|
||||
**验收标准**
|
||||
|
||||
1. 报文整体校验(声明的航班数、航班标识等)通过才处理;校验失败整包拒绝,本地数据不变。
|
||||
2. 报文里的航班逐条写入或更新;快照里没有的航班删除,并发删除消息。
|
||||
2. 报文里的航班逐条写入或更新;快照里没有的航班,在本地标记已删除,并登记待发删除消息。
|
||||
3. 以 AODB 下发的数据为准:日计划里某航班没携带的字段,视为 AODB 已删除该值,本地同步清掉。
|
||||
4. 航班量大,分批写入数据库,每批一个事务;处理失败不标记已处理,下轮整包重新处理。
|
||||
5. 按快照结果刷新 Redis:报文里的航班写入,缺席的航班移除。
|
||||
@@ -121,11 +121,11 @@
|
||||
|
||||
### US-09 向 AODB 请求数据
|
||||
|
||||
**目标**:本系统可以主动向 AODB 要数据:14 类参考数据 + 1 类日计划(请求类型以消息接口规范定义为准)。
|
||||
**目标**:本系统可以主动向 AODB 要数据:14 类参考数据(`RQRD`)+ 1 类日计划(`RQFD`),子类型以消息接口规范为准。参考数据请求由人工发起,日计划请求由 `POST /schd/sync` 触发。
|
||||
|
||||
**验收标准**
|
||||
|
||||
1. 同一类请求同时只有一个在等待;发新请求时旧请求作废。请求超过时限未等到应答,标记超时。
|
||||
1. `RQRD` 与 `RQFD` 各自同时最多一条已落信、未结案的请求;同一子类型发新请求时旧请求作废,新请求登记为待发送,等同一报文类型的在途请求收到应答、失败或超时后再落信。请求超过时限未等到应答,标记超时。
|
||||
2. 应答到达时按报文类型对应到等待中的请求;AODB 发错或迟到的应答不更新数据,记录后跳过。
|
||||
3. 收到 EROR(AODB 错误回报):定位到本系统发出的请求,标记失败并告警。
|
||||
|
||||
@@ -176,11 +176,11 @@
|
||||
|
||||
1. 每天凌晨定时执行(每日 3:30):读取全部实时航班,已结束的航班写入 Elasticsearch 历史库。
|
||||
2. 满足任一条件即视为已结束:
|
||||
- 计划时间距当前超过 3 天;
|
||||
- 已取消超过 1 小时;
|
||||
- 备降:应降本场、实际降其他机场,且计划时间距当前超过阈值;
|
||||
- 计划时间早于当前超过 3 天;
|
||||
- 取消时间(CNCL)早于当前超过 1 小时;
|
||||
- 备降:应降本场、实际降其他机场,且计划时间早于当前超过 1 小时;
|
||||
- 离港航班:计划时间早于当日、有实际起飞时间、且实际起飞不晚于当前;
|
||||
- 到港航班:计划时间早于当日、有实际到达时间、且实际到达距当前超过 1 小时。
|
||||
- 到港航班:计划时间早于当日、有实际到达时间、且实际到达时间早于当前超过 1 小时。
|
||||
3. 只有历史写入成功的航班才从实时数据删除;写入失败下次重来,已写入的不重复写入。
|
||||
4. 单个航班写入失败不影响其他航班;正在被消息处理的航班跳过,下轮再处理。
|
||||
|
||||
|
||||
Reference in New Issue
Block a user