Files
game-driver/internal/middleware/unique.go

29 lines
593 B
Go

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