package com.gzzn.omms.msgexchange.config import io.micronaut.context.annotation.Context import io.micronaut.context.annotation.Value import jakarta.inject.Singleton /** * D3 启动自检:Kafka 生产者的 acks / enable-idempotence / max-in-flight 三项 * 必须联合满足幂等生产前提。不满足时拒绝启动——静默放行会让幂等保证在运行时失效。 * * 独立于 `PipelineLifecycle`(受 autostart 开关控制),无条件执行。 */ @Singleton @Context class KafkaD3Check( @Value("\${kafka.producers.default.acks}") acks: String, @Value("\${kafka.producers.default.enable-idempotence}") idempotence: String, @Value("\${kafka.producers.default.max-in-flight-requests-per-connection}") maxInFlight: String, ) { private val acks: String = acks private val idempotence: Boolean = idempotence.toBoolean() private val maxInFlight: Int = maxInFlight.toInt() fun validate() { require(acks == "all" || acks == "-1") { "D3 violation: kafka.producers.default.acks must be 'all', got '$acks'" } require(idempotence) { "D3 violation: kafka.producers.default.enable-idempotence must be true, got $idempotence" } require(maxInFlight == 1) { "D3 violation: kafka.producers.default.max-in-flight-requests-per-connection must be 1, got $maxInFlight" } } init { validate() } }