package com.gzzn.omms.msgexchange.processing import jakarta.inject.Singleton import java.util.concurrent.locks.ReentrantLock import kotlin.concurrent.withLock /** * 串行化“终态回填”与“人工重放”,避免旧回填任务在消息重新入队后写入信箱标记。 * 生产只允许单活动实例;该锁处理同一实例内的 job 线程和管理请求并发。 */ @Singleton class MessageLifecycleGate { private val lock = ReentrantLock() fun exclusive(block: () -> T): T = lock.withLock(block) }