diff --git a/rabbitmq/instance.go b/rabbitmq/instance.go index 330c6d5..8ac30dc 100644 --- a/rabbitmq/instance.go +++ b/rabbitmq/instance.go @@ -1,10 +1,12 @@ package rabbitmq import ( + "context" "fmt" "os" "sync" + "github.com/gogf/gf/v2/frame/g" "github.com/gogf/gf/v2/util/guid" ) @@ -14,19 +16,35 @@ var ( ) // getInstanceId 获取当前实例的唯一标识(单例) -// 格式:{hostname}.{uuid8} +// 优先级:配置文件 > 环境变量 > 容器名/主机名 > 随机UUID func getInstanceId() string { instanceOnce.Do(func() { - // 获取主机名 + ctx := context.Background() + + // 1. 优先从配置文件读取(手动指定,最高优先级) + instanceId = g.Cfg().MustGet(ctx, "rabbitmq.instanceName").String() + if instanceId != "" { + return + } + + // 2. 读取环境变量(Docker/K8s部署时设置) + instanceId = os.Getenv("INSTANCE_NAME") + if instanceId != "" { + return + } + + // 3. 使用主机名(Docker容器名/主机名) hostname, err := os.Hostname() if err != nil || hostname == "" { hostname = "unknown" } - // 生成8位UUID - uuid := guid.S()[:8] - - instanceId = fmt.Sprintf("%s.%s", hostname, uuid) + // 4. 如果主机名是默认值(本地开发),添加随机后缀避免冲突 + if hostname == "localhost" || hostname == "unknown" { + instanceId = hostname + "." + guid.S()[:4] + } else { + instanceId = hostname + } }) return instanceId }