Files
2025-02-27 17:41:14 +08:00

29 lines
589 B
Go

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