29 lines
593 B
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()
|
|
}
|
|
}
|