2026-09-13 13:49:06 +08:00
|
|
|
|
# 精简实施方案
|
2026-09-13 12:52:21 +08:00
|
|
|
|
|
2026-09-13 13:49:06 +08:00
|
|
|
|
## 1. 本轮目标
|
2026-09-13 12:52:21 +08:00
|
|
|
|
|
2026-09-13 13:49:06 +08:00
|
|
|
|
关闭以下缺口:
|
2026-09-13 12:52:21 +08:00
|
|
|
|
|
2026-09-13 13:49:06 +08:00
|
|
|
|
1. `[G-KAFKA-D3]`:生产者配置满足 `D3`。
|
|
|
|
|
|
2. `[G-IGNORE]`:`US-04` 定义的忽略报文正常终结。
|
|
|
|
|
|
3. `[G-EVENT-RETENTION]`:已确认投递的事件不会无限增长。
|
2026-09-13 12:52:21 +08:00
|
|
|
|
|
2026-09-13 13:49:06 +08:00
|
|
|
|
依赖约束仅引用:`D3`、`INV-7`、`INV-8`、`INV-9`、`INV-10`、`US-03`、`US-04`。
|
2026-09-13 12:52:21 +08:00
|
|
|
|
|
2026-09-13 13:49:06 +08:00
|
|
|
|
## 2. 明确不做
|
2026-09-13 12:52:21 +08:00
|
|
|
|
|
2026-09-13 13:49:06 +08:00
|
|
|
|
本轮不实现:
|
2026-09-13 12:52:21 +08:00
|
|
|
|
|
2026-09-13 13:49:06 +08:00
|
|
|
|
- `[G-BACKFILL-BACKOFF]`:没有真实调参需求,保留现有退避算法。
|
|
|
|
|
|
- `[G-PROC-HST]`、`[G-HST-RETENTION]`:等待 `Q6`、`Q7`、`Q9` 定案后单独设计。
|
|
|
|
|
|
- `[G-FLOP-IDEMPOTENT]`:继续保持 `INV-20`、`CLM-3` 不可声明。
|
|
|
|
|
|
- `[G-REQ-TRACK]`、`[G-MAFL]`、`[G-REPLAY-CHANNEL]` 等其他缺口。
|
2026-09-13 12:52:21 +08:00
|
|
|
|
|
2026-09-13 13:49:06 +08:00
|
|
|
|
具体排期只记录在 Plane,不写入本 spec。
|
2026-09-13 12:52:21 +08:00
|
|
|
|
|
2026-09-13 13:49:06 +08:00
|
|
|
|
## 3. [G-KAFKA-D3]
|
2026-09-13 12:52:21 +08:00
|
|
|
|
|
2026-09-13 13:49:06 +08:00
|
|
|
|
实现:
|
2026-09-13 12:52:21 +08:00
|
|
|
|
|
2026-09-13 13:49:06 +08:00
|
|
|
|
- 将 Kafka producer 的有效 `PARAM:kafka.producers.default.max-in-flight-requests-per-connection` 固定为 `D3` 要求值。
|
|
|
|
|
|
- 启动时检查最终生效配置;不满足 `D3` 时拒绝启动。
|
|
|
|
|
|
- 不改变现有投递模型、批次、重试或 topic。
|
2026-09-13 12:52:21 +08:00
|
|
|
|
|
2026-09-13 13:49:06 +08:00
|
|
|
|
验收:
|
2026-09-13 12:52:21 +08:00
|
|
|
|
|
2026-09-13 13:49:06 +08:00
|
|
|
|
- 默认配置可以启动。
|
|
|
|
|
|
- 非法环境变量覆盖导致启动失败。
|
|
|
|
|
|
- `acks`、幂等和 `max-in-flight` 三项联合满足 `D3`。
|
2026-09-13 12:52:21 +08:00
|
|
|
|
|
2026-09-13 13:49:06 +08:00
|
|
|
|
## 4. [G-IGNORE]
|
2026-09-13 12:52:21 +08:00
|
|
|
|
|
2026-09-13 13:49:06 +08:00
|
|
|
|
实现:
|
2026-09-13 12:52:21 +08:00
|
|
|
|
|
2026-09-13 13:49:06 +08:00
|
|
|
|
- 继续使用现有 XML 解码结果和 `MsgKind.Unsupported`,不增加新的领域类型或规则引擎。
|
|
|
|
|
|
- 在 `MessageProcessor` 中按以下顺序处理:
|
2026-09-13 12:52:21 +08:00
|
|
|
|
|
2026-09-13 13:49:06 +08:00
|
|
|
|
解码 META
|
|
|
|
|
|
→ 绑定 `IDENTITY_KEY`
|
|
|
|
|
|
→ 匹配 `US-04` 忽略清单
|
|
|
|
|
|
→ 命中则写 `SKIPPED` + 回填意图
|
|
|
|
|
|
→ 未命中则进入现有 `MsgKind` 分派
|
2026-09-13 12:52:21 +08:00
|
|
|
|
|
2026-09-13 13:49:06 +08:00
|
|
|
|
- 忽略终态不取得 `PIPELINE_LOCK`,不写航班表,不创建 `MSG_EVENT`。
|
|
|
|
|
|
- 使用 `LAST_ERROR=ignored:<rule>` 保存原因。
|
|
|
|
|
|
- 只增加 `US-04` 要求的忽略计数;指标名登记到 `reference.md`。
|
2026-09-13 12:52:21 +08:00
|
|
|
|
|
2026-09-13 13:49:06 +08:00
|
|
|
|
验收:
|
2026-09-13 12:52:21 +08:00
|
|
|
|
|
2026-09-13 13:49:06 +08:00
|
|
|
|
- `US-04` 中全部规则及大小写场景均命中。
|
|
|
|
|
|
- 忽略消息先完成身份绑定(`US-03`)。
|
|
|
|
|
|
- 重复身份继续走既有 `duplicate-of` 路径。
|
|
|
|
|
|
- `SKIPPED` 与回填意图同语句落库。
|
|
|
|
|
|
- 不产生航班或 outbox 副作用。
|
|
|
|
|
|
- 未命中的合法类型继续按 `UNSUPPORTED` 处理。
|
2026-09-13 12:52:21 +08:00
|
|
|
|
|
2026-09-13 13:49:06 +08:00
|
|
|
|
## 5. [G-EVENT-RETENTION]
|
2026-09-13 12:52:21 +08:00
|
|
|
|
|
2026-09-13 13:49:06 +08:00
|
|
|
|
实现:
|
2026-09-13 12:52:21 +08:00
|
|
|
|
|
2026-09-13 13:49:06 +08:00
|
|
|
|
- 下一条 PG Flyway 迁移仅给 `MSG_EVENT` 增加可空 `SENT_AT`。
|
|
|
|
|
|
- 所有投递确认操作在设置 `STATE='SENT'` 的同一条 `UPDATE` 中写入 `SENT_AT`。
|
|
|
|
|
|
- `KAFKA:schd` 新代次重置为 `PENDING` 时清空 `SENT_AT`。
|
|
|
|
|
|
- 迁移时将存量 `SENT` 行的 `SENT_AT` 设置为迁移时刻 `CURRENT_TIMESTAMP`,避免提前清理。
|
|
|
|
|
|
- 在现有 `JobRunner` 维护周期中增加一次有界清理,不新增线程或调度参数。
|
|
|
|
|
|
- 只删除同时满足以下条件的行:
|
2026-09-13 12:52:21 +08:00
|
|
|
|
|
2026-09-13 13:49:06 +08:00
|
|
|
|
```
|
|
|
|
|
|
STATE = 'SENT'
|
|
|
|
|
|
AND SENT_AT IS NOT NULL
|
|
|
|
|
|
AND SENT_AT < 当前时间 - PARAM:msgx.pipeline.event-retention
|
|
|
|
|
|
```
|
2026-09-13 12:52:21 +08:00
|
|
|
|
|
2026-09-13 13:49:06 +08:00
|
|
|
|
- 删除仍携带 `STATE='SENT'` 条件,避免与 `KAFKA:schd` 新代次 upsert 竞态。
|
|
|
|
|
|
- `PENDING`、`DEAD`、`SENT_AT IS NULL` 一律保留。
|
2026-09-13 12:52:21 +08:00
|
|
|
|
|
2026-09-13 13:49:06 +08:00
|
|
|
|
验收:
|
2026-09-13 12:52:21 +08:00
|
|
|
|
|
2026-09-13 13:49:06 +08:00
|
|
|
|
- 投递确认与 `SENT_AT` 原子写入。
|
|
|
|
|
|
- 存量 `SENT` 行迁移后不会立即过期。
|
|
|
|
|
|
- 到期 `SENT` 行被分批清理,未到期及其他状态不受影响。
|
|
|
|
|
|
- `KAFKA:schd` 重置与清理两种并发顺序均不误删。
|
|
|
|
|
|
- 清理可重复执行,不影响投递顺序。
|
2026-09-13 12:52:21 +08:00
|
|
|
|
|
2026-09-13 13:49:06 +08:00
|
|
|
|
## 6. 测试约束
|
2026-09-13 12:52:21 +08:00
|
|
|
|
|
2026-09-13 13:49:06 +08:00
|
|
|
|
- 时间测试统一使用 `TestClocks.kt`。
|
|
|
|
|
|
- 仓储行为使用内存适配器;迁移结构使用既有 Flyway 测试设施。
|
|
|
|
|
|
- 禁止 `Thread.sleep` 和真实外部基础设施。
|
|
|
|
|
|
- 只补上述三个缺口对应的回归,不扩展其他功能矩阵。
|