feat: scaffold Micronaut+Kotlin service per ACMA-8 v4 architecture

- 4 modules (ingress/processing/delivery/reference) + codec + infra + jobs
- Flyway V2.0.0: six aux tables (PROC_STATE/MSG_EVENT/REF_DATA/REQ_TRACK/PUMP_JOB/FLIGHT_STATE)
- Lua: snapshot_replace (atomic cover+gen-diff-delete), batch_delete (3:30 sweep)
- config: env-externalized secrets, phase A/B switch, ACMA-8 param-table defaults
- logback: logstash TCP JSON + traceId MDC
- pure-logic tests: identity (I3), schd aggregation max-by-EVENT_ID (FIX #7)
- build verified: gradle compile+test green on JDK 25 (Micronaut 5.1 requires JVM 25+)

Migrated from legacy repo subdirectory per repo-strategy decision (separate repo
per service, org convention). Refs: ACMA-9, ACMA-8 v4, ACMA-6
This commit is contained in:
windyboy
2026-09-06 16:13:50 +08:00
commit b2f3b896cc
33 changed files with 1414 additions and 0 deletions
+60
View File
@@ -0,0 +1,60 @@
# =====================================================================
# msgexchange-nextgen 配置(ACMA-8 v4
# 口令/端点全部环境变量外置——零入库(ACMA-8 契约冻结 + 安全基线)
# =====================================================================
msgx:
phase: A # A=Redis 权威(主泵单线程写,I5);B=FLIGHT_STATE 权威+投影
service-name: msgexchangeapi # 契约冻结;影子实例用 msgexchangeapi-shadow + 独立表/key前缀/topic
register-eureka: true # 影子对拍期置 false 或独立服务名
pipeline: # —— ACMA-8 参数表初值(阶段 0 基线校准)——
poll-interval: 1s # KEEP 现役 1s 轮询节奏
claim-batch: 50
max-attempts: 5 # 处理/投递同值
backoff-ms: [1000, 2000, 4000, 8000, 16000] # 指数退避,单次封顶 60s
backoff-cap-ms: 60000
head-deadline: 10m # 队头滞留上界 = 最坏 HOL 时长(毒丸升级)
schd:
flush-period: 3s # KEEP 现役推送节律
flush-limit: 500 # 批上限,防积压尖峰
identity:
include-day-boundary: false # CONFIRM(矩阵 #11):SEQN 重置作用域确认前保持关闭
consistency-check: # 阶段 A 唯一主动一致性哨兵(必选)
on-startup: true
daily-sample-ratio: 0.01
micronaut:
application:
name: msgexchange-nextgen
server:
port: 8080
datasource:
url: ${MSGX_DB_URL}
username: ${MSGX_DB_USER}
password: ${MSGX_DB_PASSWORD}
driver-class-name: com.mysql.cj.jdbc.Driver
flyway:
enabled: true
locations: classpath:db/migration
redis:
uri: ${MSGX_REDIS_URI} # 阶段 A 权威存储;仅主泵线程写(I5)
kafka:
bootstrap:
servers: ${MSGX_KAFKA_SERVERS}
producers:
acks: all
enable-idempotence: true
eureka:
client:
registration:
enabled: ${msgx.register-eureka}
default-zone: ${MSGX_EUREKA_URL:http://127.0.0.1:8761/eureka}
# logstash TCP JSON 通道保留(字段兼容现网,ACMA-3 部署前提)——见 logback.xml
logstash:
host: ${MSGX_LOGSTASH_HOST:127.0.0.1}
port: ${MSGX_LOGSTASH_PORT:5044}