package middleware import ( "game-driver/internal/common" "game-driver/leaf" "go.uber.org/zap" "sync" ) // Unique 唯一任务中间件,会停止之前的任务,让新任务执行。同一时间只能有一个任务在执行 func Unique(stopper common.Stopper) leaf.HandlerFunc { var lock sync.Mutex return func(c *leaf.Context) { if !lock.TryLock() { zap.S().Infoln("停止之前的任务,再尝试加锁") stopper.Stop() lock.Lock() } zap.S().Infoln("加锁完成") defer func() { lock.Unlock() zap.S().Infoln("解锁完成") }() c.Next() } }