Files
msgexchange-v2/docs/reference.md
T

10 KiB
Raw Blame History

运行参考

本文件列出运行参数、固定调度时间、监控指标、代码位置和错误类别。业务约定见 specification.md,处理流程见 implementation.md;其他文档引用参数时使用 PARAM:<完整键>

参数注册表

表中数值来自当前配置或代码。「暂定」表示取值还没有业务或容量依据;「与需求冲突」表示当前配置不符合验收要求。

收报、处理与投递

参数 默认值 用途与约束 依据
msgx.pipeline.poll-interval 1s 每隔多久查询一次信箱 沿用旧系统
msgx.pipeline.claim-batch 50 一次最多从信箱读取多少条消息 暂定
msgx.pipeline.max-attempts 5 处理或发送一条消息最多尝试多少次 暂定
msgx.pipeline.backoff-ms [1000, 2000, 4000, 8000] ms 每次失败后等多久再试;等待时间档位数须比最多尝试次数少一 暂定
msgx.pipeline.backoff-cap-ms 60000 ms 失败后最长等待时间 暂定
msgx.pipeline.delivery-batch 200 一次最多领取多少条待发的 msg 消息 暂定
msgx.pipeline.delivery-drain-rounds 10 连续领取多少批后,先尝试发送一批 schd 消息 暂定
msgx.schd.flush-period 3s 每隔多久尝试发送一批 schd 消息 沿用旧系统
msgx.schd.flush-limit 500 一批 schd 消息最多包含多少个航班 暂定
msgx.pipeline.event-retention 7d 发送成功的消息在数据库保留多久,从 SENT_AT 起算 暂定

写回信箱与编号扫描

参数 默认值 用途与约束 依据
msgx.pipeline.overdue-backfill 30d 入队后超过期限 R 仍未写回处理时间,就立即再试;若仍失败,则停止自动重试。R 不得长于信箱行可保证的最短保留期 暂定
msgx.pipeline.backfill-batch 100 一次最多检查多少条待写回信箱的记录 暂定
msgx.pipeline.backfill-max-attempts 100 失败次数达到此值时告警,仍继续重试直到期限 R 暂定
msgx.pipeline.backfill-backoff-ms 30000 ms 首次写回失败后等多久再试 暂定
msgx.pipeline.backfill-backoff-cap-ms 900000 ms 以后每次重试最长等多久 暂定
msgx.pipeline.max-commit-delay 5m 当前按编号读信箱时,遇到缺号最多等待多久;改用处理时间筛选后删除(G-SCAN-PREDICATE 待替换
msgx.pipeline.cutover-watermark 不设置 首次启动时从哪个编号开始读信箱;可填 minzeromax 或具体编号;改用处理时间筛选后删除(G-SCAN-PREDICATE 待替换

固定调度

下列名称只用于查阅固定时间,不能写入配置文件。

登记名 当前值 含义
msgx.pipeline.backfill-scan-period 30s 每隔多久检查待写回信箱的记录;不是完成时限
msgx.history.sweep-time 03:30 按机场时间每天开始清理历史航班的时间

运行开关与航班域

参数 默认值 用途与约束 依据
msgx.service-name msgexchangeapi 向 Eureka 注册时使用的服务名;用于对比的新实例须使用不同名称 沿用旧系统
msgx.register-eureka true 是否向 Eureka 注册服务 当前实现
msgx.stubs truedev 是否用内存数据代替真实数据库和消息系统;只在开发环境开启 开发环境
msgx.pipeline.autostart false 服务启动时是否自动读信箱、处理和发送消息 默认关闭
msgx.operation-day.zone Asia/Shanghai 计算运营日(按机场规则划分的航班日期)和清理历史航班时使用的时区;填错则拒绝启动 沿用旧系统
msgx.operation-day.cutoff-hour 0 按机场时间几点切换运营日;业务边界尚未确认 暂定
msgx.identity.include-day-boundary false 去重时是否把日期算进消息身份;受 C-3 约束,不能随意改变 默认关闭
msgx.health.backlog-cache-ttl-ms 30000 ms /health/metrics 共用的未处理消息统计最多缓存多久;0 表示每次重算 暂定
msgx.history.history-store-enabled false 是否启用历史航班写入;关闭时不删除实时航班 默认关闭
msgx.history.cancelled-hours 48 小时 US-14 AC2 的取消航班清理条件冲突 与需求冲突
msgx.history.terminal-hours 48 小时 US-14 AC2 的清理条件不包含这个等待时间 与需求冲突
msgx.history.deleted-hours 48 小时 已删除航班还要等待的时间;US-14 AC2 没有此条件 与需求冲突
msgx.history.idle-hours 168 小时 长时间未更新的航班也会被清理;US-14 AC2 没有此条件 与需求冲突
msgx.history.snap-log-retention-days 90 日计划处理记录保存多久 暂定

信箱与外部依赖(成组登记)

参数 默认值 用途与约束 依据
mailbox.processed-value PROCESSED 写回处理时间时,同时写入 CMINMSGS_STATUSQ8 未确认这个状态值 当前实现
mailbox.shared-mysql.enabled false 是否连接共享 MySQL 信箱 默认关闭
mailbox.shared-mysql.url 环境变量 共享信箱地址;用户名和密码也从环境变量读取 当前实现
mailbox.shared-mysql.connect-timeout-ms 3000 ms 连接 MySQL 最长等待多久;同组读取最长等待 socket-timeout-ms=30000 ms 暂定
mailbox.shared-mysql.pool-connection-timeout-ms 5000 ms 等待一个可用的 MySQL 连接最长多久;同组校验连接最长等待 pool-validation-timeout-ms=3000 ms 暂定
datasources.default.connection-timeout 5000 ms 等待一个可用的 PostgreSQL 连接最长多久;同组连接校验 validation-timeout=3000、空闲时间 idle-timeout=300000、连接寿命 max-lifetime=1800000 ms 暂定
datasources.default.data-source-properties.connectTimeout 3 连接 PostgreSQL 最长等待多久;同组读取最长等待 socketTimeout=30 暂定
kafka.producers.default.acks all Kafka 何时确认收到消息;与下两项一起满足 D2 当前实现
kafka.producers.default.enable-idempotence true 是否避免 Kafka 生产者自身重复发送,见 D2 当前实现
kafka.producers.default.max-in-flight-requests-per-connection 1 一个连接同时最多发送多少个未确认请求,见 D2 当前实现

环境变量名见 .env.example;其余基础设施键见 src/main/resources/application.yml

指标与健康

指标 含义 关注信号
msgx.pipeline.backlog.unfinished 尚未处理完的消息数 长期不降:消息越积越多
msgx.pipeline.backlog.oldest_unprocessed_seconds 最早收到且尚未处理的消息距今多久 持续增长:最早的消息一直没处理
msgx.pipeline.backfill.unmarked_terminal 处理已结束、但信箱还没写入处理时间的消息数 长期不降:写回信箱受阻
msgx.pipeline.backfill.abandoned 已停止自动写回信箱的消息数 非零:需要人工对账
msgx.pipeline.backfill.oldest_unmarked_seconds 最早待写回信箱的消息距今多久 持续增长:写回越来越慢
msgx.pipeline.job.heartbeat_age_seconds 上次作业成功运行距今多久 持续增长:作业可能已停
msgx.pipeline.job.last_failure_age_seconds 上次作业出错距今多久 结合出错次数判断故障
msgx.pipeline.job.ticks.total 作业成功运行的次数 不增长:作业可能已停
msgx.pipeline.job.failures.total 作业出错次数 增长:作业持续出错
msgx.pipeline.job.last_sweep_selected 上次检查找到多少条待写回信箱的记录 持续达到每批上限:待办太多
msgx.pipeline.codec.srvt_seen.total 收到含 SRVT 段的消息数 非零:核对 G-SRVT-VIPF
msgx.pipeline.codec.vipf_seen.total 收到含 VIPF 段的消息数 非零:核对 G-SRVT-VIPF
msgx.pipeline.processing.ignored.total IgnoreRules 跳过的消息数 清单含 REGNRSTAEROR,与 US-13US-09 冲突
msgx.pipeline.watermark.lag 信箱最新编号比已扫描编号大多少 改用处理时间筛选后删除(G-SCAN-PREDICATE

未处理消息的统计使用同一份缓存;统计不可用显示 NaN,没有记录可比时年龄与编号差显示 -1。作业计数在进程重启后归零;作业已启动却连续三个检查周期没有成功运行时,/healthDOWN

模块与代码入口

关注点 代码入口
读取信箱与 HTTP 入口 ingress/InboxPoller.ktingress/InboxController.kt
XML 解析 codec/JacksonXmlCodec.ktcodec/SisWireMapper.kt
顺序处理与航班变更 processing/Pump.ktprocessing/DynamicProcessors.ktprocessing/ScheduleProcessor.kt
写回信箱与发送 Kafka processing/BackfillService.ktdelivery/Dispatcher.ktinfra/kafka/KafkaDeliveryPort.kt
定时任务 jobs/JobRunner.ktjobs/HistorySweepJob.ktjobs/EventCleanupJob.kt
数据库读写与手动重试 infra/persistence/jdbc/infra/retry/
配置、指标与健康检查 config/infra/metrics/infra/health/

错误分类与重放白名单

错误类别 发生情况 处理结果 修复后可手动重试
MALFORMED 找不到原文,或 XML、必要字段无效 立即记 DEAD,停止自动处理
PROTOCOL 整份报文未通过业务校验,或运营日不一致 整份不写数据库,记 DEAD
CODEC_ERROR 解码程序尚不能识别报文结构 FAILED,等待后重试
UNSUPPORTED 当前没有对应的处理程序 当前代码记 FAILED 并重试;US-03 AC2 要求跳过合法未知类型
INFRA 数据库、网络或程序执行出错 FAILED,等待后重试
EXHAUSTED 自动重试次数已用尽 DEAD;原错误类别被覆盖,原因留在 LAST_ERROR

停止自动写回信箱时,记录原因 MISSING_ROW(信箱行不存在)或 TRANSIENT_DEADLINE(故障持续到期限 R)。两种情况都没有确认处理时间已写入;恢复和清理条件见 implementation.md「回填」。