2 Commits

Author SHA1 Message Date
1835faddc0 ci/cd调整 2026-06-10 14:54:26 +08:00
qhd
0ddc2f17b9 fix: 修复snowflake节点并发初始化问题 2026-06-06 14:34:33 +08:00
2 changed files with 24 additions and 13 deletions

View File

@@ -7,6 +7,7 @@ import (
"fmt"
"regexp"
"strings"
"sync"
"time"
"gitea.com/red-future/common/beans"
@@ -29,8 +30,28 @@ import (
var (
localCache *gcache.Cache
snowflakeNode *snowflake.Node
snowflakeOnce sync.Once
)
func init() {
ctx := context.Background()
snowflakeOnce.Do(func() {
nodeId := genv.Get("APP_NODE", 1).Int64()
// 安全范围 0~1023
if nodeId < 0 || nodeId > 1023 {
nodeId = 1
}
node, err := snowflake.NewNode(nodeId)
if err != nil {
g.Log().Errorf(ctx, "snowflake init failed: %v", err)
return
}
snowflakeNode = node
})
}
// getLocalCache 获取本地缓存实例
func getLocalCache() *gcache.Cache {
if localCache == nil {
@@ -166,17 +187,8 @@ func insertHook(ctx context.Context, in *gdb.HookInsertInput) (result sql.Result
return nil, err
}
// 懒加载初始化全局snowflake节点只创建一次
if snowflakeNode == nil {
nodeId := genv.Get("APP_NODE", "").Int64()
if g.IsEmpty(nodeId) {
nodeId = 1
}
node, err := snowflake.NewNode(nodeId)
if err != nil {
return nil, err
}
snowflakeNode = node
if g.IsEmpty(snowflakeNode) {
return nil, fmt.Errorf("snowflakeNode is nil")
}
for i := range in.Data {

3
go.mod
View File

@@ -1,5 +1,4 @@
module gitea.com/red-future/common
module common
go 1.26.0
require (