Files
msgexchange-v2/gradle/libs.versions.toml
T
windyboy 1e75a81107 fix(pipeline): 修复取报-处理-回填链路的超时、吞吐、回填与 FIFO 问题
外部调用(ACM2-33)
- 共享 MySQL 与自有 PG 全部补有界超时:驱动 connect/socket 超时 + Hikari 池超时
  (注意 Micronaut 的 Hikari 项是毫秒数,不是 Duration 字面量)
- 删除主泵/毒丸路径的 inline 回填:跨库写不再占用 FIFO 关键路径,回填统一由扫描驱动
- 游标自愈:save() 改为「先 UPDATE、缺行 INSERT」,缺行只记一次 ERROR
- Pump/Dispatcher 外层 catch 补 error 日志与失败计数

投递吞吐(ACM2-34)
- Dispatcher 改批量领取;队头退避未到期或首条发送失败即停止本轮(保持目标内保序)
- 有活不再 sleep;删除不可达的 state==SENT 死条件;markSent 移入分支;
  superseded 清理加轮数上限与空 eventId 保护

回填闭环(ACM2-36,V4)
- MISSING(运行时确认行不存在)立即放弃自动重试并告警;暂时性故障达上限后停止自动重试
- 新增 reopen 人工恢复入口;放弃 ≠ 标记已确认(BACKFILL_AT 仍为空,清除前提不成立)
- 扫描改 (BACKFILL_ATTEMPTS, MSG_ID) 公平轮转并排除放弃行,消除全局回填饥饿
- V4 只加字段与必要索引,不按年龄做任何存量推断

切流播种(ACM2-35,V5)
- cutover-watermark 四模式(min/zero/max/显式 ID),默认不播种、代码不做默认选择
- 升级实例拒绝重新播种(SEEDED_AT 为 NULL ≠ 从未消费);播种与水位同语句落库
- 非法取值由启动自检挡下

错误分类与入口契约(ACM2-37)
- 未知 SCHD 子类型改为 UNSUPPORTED,不再静默当全量日计划合并
- ADFT 运营日冲突改走 ProtocolViolation → DEAD(PROTOCOL)
- 兼容入口 receivedAt 缺失回退到注入 Clock;MessageLifecycleGate 强制注入 + 装配断言
- FIFO:主泵只领取 msgId ≤ W,兼容入口登记的行在水位追平前不被领取

时间源与可观测(ACM2-38 / ACM2-41 阶段 0)
- 仓储/处理器/作业全部经注入 Clock;移除 markTerminal/markBackfilled 的 Instant.now() 默认值
- 退避表档位与 max-attempts 对齐并加启动自检
- Micrometer 7 个 gauge(@Context 急切注册)+ /health 与 /metrics 共用积压快照缓存
- 只读迟到检测:监视被放行的空洞 ID 是否后来真的出现,只计数告警、不补入队

Plane: ACM2-33 ACM2-34 ACM2-35 ACM2-36 ACM2-37 ACM2-38 ACM2-41
Tests: 88 → 120(1 skipped 需真实 PG)
2026-09-11 08:08:35 +08:00

55 lines
3.6 KiB
TOML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 版本矩阵(阶段0 冒烟实测固化 · 2026-09-06 · 见 ACM2-10 U02/U03
# - JDK 25Micronaut 5.1 系构件要求 JVM 25+build.gradle.kts toolchain=25,实测可构建)。
# - Micronaut:版本由 gradle.properties `micronaut.version` 统一驱动(=5.1.3micronaut-platform BOM
# 最高发布版本;5.1.10 仅有 core 补丁无对应平台 BOM,KSP 处理器类路径会解析失败)。
# 下方 micronaut = "5.1.3" 作为 ksp 处理器(micronaut-inject-kotlin)的版本来源,勿再回落 5.1.0 / JDK21 旧口径。
# 【2026-09-07 实测修正】`./gradlew :dependencies` 显示 micronaut-platform:5.1.3 BOM 确实生效,但
# io.micronaut core 系(http-server-netty/management/runtime/inject/aop)实际被更高约束解析到 **5.1.13**,
# data 系停留在 5.1.3 → classpath 为 5.1.3 与 5.1.13 混用;KSP 处理器(micronaut-inject-kotlin)为 5.1.3
# 与运行期 core 5.1.13 并存。上文「版本由 micronaut.version 单点驱动=5.1.3」「5.1.10 无平台 BOM 会解析
# 失败」与观测不符,勿再引用;版本矩阵需按解析结果重新钉真(建议随 U05 数据层批次处理)。
# - Kotlin 2.3.0 + KSP 2.3.0Kotlin 2.3 配套版;注解处理必需,否则 Micronaut 不生成 BeanDefinition)。
[versions]
kotlin = "2.3.0"
micronaut = "5.1.3"
ksp = "2.3.0"
junit = "5.11.4"
snakeyaml = "2.4"
# ACM2-1121 类静态主数据独立库选型 PostgreSQLdatasources.reference,阶段 6 实装)
postgresql = "42.7.4"
[plugins]
kotlin-jvm = { id = "org.jetbrains.kotlin.jvm", version.ref = "kotlin" }
kotlin-ksp = { id = "com.google.devtools.ksp", version.ref = "ksp" }
micronaut-application = { id = "io.micronaut.application", version = "4.6.0" }
[libraries]
micronaut-http-server-netty = { module = "io.micronaut:micronaut-http-server-netty" }
micronaut-jackson-databind = { module = "io.micronaut:micronaut-jackson-databind" }
micronaut-data-jdbc = { module = "io.micronaut.data:micronaut-data-jdbc" }
micronaut-jdbc-hikari = { module = "io.micronaut.sql:micronaut-jdbc-hikari" }
micronaut-flyway = { module = "io.micronaut.flyway:micronaut-flyway" }
micronaut-redis-lettuce = { module = "io.micronaut.redis:micronaut-redis-lettuce" }
micronaut-kafka = { module = "io.micronaut.kafka:micronaut-kafka" }
micronaut-discovery-eureka = { module = "io.micronaut.discovery:micronaut-discovery-client" }
micronaut-management = { module = "io.micronaut:micronaut-management" }
# 指标接入(Micrometer):版本由 micronaut-platform BOM 统一管理,勿在此钉版本。
micronaut-micrometer-core = { module = "io.micronaut.micrometer:micronaut-micrometer-core" }
# Kotlin 注解处理(KSP)处理器——与 kotlin-ksp 插件配套(U01
micronaut-inject-kotlin = { module = "io.micronaut:micronaut-inject-kotlin", version.ref = "micronaut" }
jackson-dataformat-xml = { module = "com.fasterxml.jackson.dataformat:jackson-dataformat-xml", version = "2.18.2" }
jackson-module-kotlin = { module = "com.fasterxml.jackson.module:jackson-module-kotlin", version = "2.18.2" }
logstash-logback-encoder = { module = "net.logstash.logback:logstash-logback-encoder", version = "8.0" }
mysql-connector-j = { module = "com.mysql:mysql-connector-j", version = "9.1.0" }
postgresql = { module = "org.postgresql:postgresql", version.ref = "postgresql" }
snakeyaml = { module = "org.yaml:snakeyaml", version.ref = "snakeyaml" }
junit-jupiter = { module = "org.junit.jupiter:junit-jupiter", version.ref = "junit" }
h2 = { module = "com.h2database:h2", version = "2.3.232" }
[bundles]
micronaut-runtime = [
"micronaut-http-server-netty",
"micronaut-jackson-databind",
"micronaut-management",
]