18 lines
539 B
Kotlin
18 lines
539 B
Kotlin
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 <T> exclusive(block: () -> T): T = lock.withLock(block)
|
||
|
|
}
|
||
|
|
|