From 63c19d0727d403576bbcdf953e9bcc4b9e36e561 Mon Sep 17 00:00:00 2001 From: Cold <16419454+cold502@user.noreply.gitee.com> Date: Mon, 29 Dec 2025 11:33:37 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E4=BA=86=E4=B8=80=E4=B8=8Bmq?= =?UTF-8?q?=E7=BB=91=E5=AE=9A=E9=98=9F=E5=88=97=E5=90=8D,=E4=BD=BF?= =?UTF-8?q?=E7=94=A8os.hostname?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- rabbitmq/instance.go | 30 ++++++++++++++++++++++++------ 1 file changed, 24 insertions(+), 6 deletions(-) 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 }