去掉单例模式,改为每次初始化均生成一个新的实例

This commit is contained in:
Yun
2025-08-23 18:55:59 +08:00
parent 2a7092ab0a
commit bb5b01071a
4 changed files with 110 additions and 106 deletions
+5 -5
View File
@@ -25,7 +25,7 @@ import (
// 暂不支持删除定时器,因为这个定时器的设计是基于全局的,如果删除了,那么其他服务就不知道了
// 单例模式
var clusterOnceLimit sync.Once
// var clusterOnceLimit sync.Once
// 已注册的任务列表
var clusterWorkerList sync.Map
@@ -48,16 +48,16 @@ type Cluster struct {
priorityKey string // 全局优先级的key
}
var clu *Cluster = nil
// var clu *Cluster = nil
// 初始化定时器
// 全局只需要初始化一次
func InitCluster(ctx context.Context, red redis.UniversalClient, keyPrefix string, opts ...Option) *Cluster {
clusterOnceLimit.Do(func() {
// clusterOnceLimit.Do(func() {
op := newOptions(opts...)
clu = &Cluster{
clu := &Cluster{
ctx: ctx,
redis: red,
cache: cachex.NewCache(),
@@ -110,7 +110,7 @@ func InitCluster(ctx context.Context, red redis.UniversalClient, keyPrefix strin
}
}
}(ctx)
})
// })
return clu
}
+12 -7
View File
@@ -24,8 +24,8 @@ func main() {
// re()
// d()
cluster()
// once()
// cluster()
once()
select {}
@@ -46,11 +46,12 @@ func once() {
if err != nil {
fmt.Println(err)
}
d = OnceData{
Num: 4,
}
// d = OnceData{
// Num: 4,
// }
dd := 123
// dy, _ = json.Marshal(d)
err = one.Create("test", "test4", 1*time.Second, d)
err = one.Save("test", "test4", 1*time.Second, dd)
if err != nil {
fmt.Println(err)
}
@@ -67,7 +68,11 @@ func (l OnceWorker) Worker(ctx context.Context, taskType string, taskId string,
fmt.Println("执行时间:", time.Now().Format("2006-01-02 15:04:05"))
fmt.Println(taskType, taskId)
fmt.Printf("原来的参数:%+v\n", attachData)
fmt.Printf("原来的参数:%+v %T\n", attachData, attachData)
v, ok := attachData.(int64)
fmt.Println("vvvvvvv", v, ok)
// fmt.Printf()
// d := OnceData{}
+5 -6
View File
@@ -6,7 +6,6 @@ import (
"fmt"
"runtime/debug"
"strings"
"sync"
"time"
"github.com/go-redis/redis/v8"
@@ -47,8 +46,8 @@ type Callback interface {
Worker(ctx context.Context, taskType string, taskId string, attachData interface{}) *OnceWorkerResp
}
var wo *Once = nil
var once sync.Once
// var wo *Once = nil
// var once sync.Once
type extendData struct {
Delay time.Duration
@@ -62,8 +61,8 @@ func InitOnce(ctx context.Context, re redis.UniversalClient, keyPrefix string, c
}
op := newOptions(opts...)
once.Do(func() {
wo = &Once{
// once.Do(func() {
wo := &Once{
ctx: ctx,
logger: op.logger,
zsetKey: "timer:once_zsetkey" + keyPrefix,
@@ -74,7 +73,7 @@ func InitOnce(ctx context.Context, re redis.UniversalClient, keyPrefix string, c
}
go wo.getTask()
go wo.watch()
})
// })
return wo
}
+5 -5
View File
@@ -22,7 +22,7 @@ var singleWorkerList sync.Map
var singleTimerIndex int // 当前定时数目
var singleOnceLimit sync.Once // 实现单例
// var singleOnceLimit sync.Once // 实现单例
type Single struct {
ctx context.Context
@@ -30,7 +30,7 @@ type Single struct {
location *time.Location
}
var sin *Single = nil
// var sin *Single = nil
var singleNextTime = time.Now() // 下一次执行的时间
@@ -38,10 +38,10 @@ var singleNextTime = time.Now() // 下一次执行的时间
// @param ctx context.Context 上下文
// @param opts ...Option 配置项
func InitSingle(ctx context.Context, opts ...Option) *Single {
singleOnceLimit.Do(func() {
// singleOnceLimit.Do(func() {
op := newOptions(opts...)
sin = &Single{
sin := &Single{
ctx: ctx,
logger: op.logger,
location: op.location,
@@ -67,7 +67,7 @@ func InitSingle(ctx context.Context, opts ...Option) *Single {
}
sin.logger.Infof(ctx, "timer: initend")
}(ctx)
})
// })
return sin
}