Files
msgexchange-v2/src/main/kotlin/com/gzzn/omms/msgexchange/config/KafkaD3Check.kt
T

40 lines
1.4 KiB
Kotlin
Raw Normal View History

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()
}
}