refactor: 使用环境变量代替IP哈希生成节点ID

This commit is contained in:
2026-04-13 14:50:25 +08:00
parent 8183fc89f1
commit 1b85b42e78
2 changed files with 15 additions and 76 deletions

View File

@@ -5,7 +5,6 @@ import (
"database/sql"
"encoding/json"
"fmt"
"hash/fnv"
"regexp"
"strings"
"time"
@@ -18,6 +17,7 @@ import (
"github.com/gogf/gf/v2/database/gredis"
"github.com/gogf/gf/v2/frame/g"
"github.com/gogf/gf/v2/os/gcache"
"github.com/gogf/gf/v2/os/genv"
"github.com/gogf/gf/v2/os/glog"
"github.com/gogf/gf/v2/text/gstr"
"github.com/gogf/gf/v2/util/gconv"
@@ -158,37 +158,18 @@ func catchSQLHook() gdb.HookHandler {
}
}
func getNodeIdFromIPPort(ctx context.Context) int64 {
// 获取本地IP
ip, err := utils.GetLocalIP()
if err != nil {
return 0
}
// 获取端口
port := g.Cfg().MustGet(ctx, "server.address").String()
// 拼接字符串
addr := fmt.Sprintf("%s%s", ip, port)
// 计算哈希(保证唯一且稳定)
h := fnv.New64a()
h.Write([]byte(addr))
hashVal := h.Sum64()
// 取模 1024 → 得到 0~1023 的合法 node
return int64(hashVal % 1024)
}
// ==================== Insert钩子 ====================
func insertHook(ctx context.Context, in *gdb.HookInsertInput) (result sql.Result, err error) {
userInfo, err := utils.GetUserInfo(ctx)
if err != nil {
return nil, err
}
nodeId := getNodeIdFromIPPort(ctx)
if nodeId == 0 {
return nil, fmt.Errorf("nodeId cannot be empty")
nodeId := genv.Get("APP_NODE", "").Int64()
if g.IsEmpty(nodeId) {
nodeId = 1
}
node, err := snowflake.NewNode(nodeId)
if err != nil {
return nil, err