gateway分配实例策略调整

This commit is contained in:
2025-12-03 14:34:27 +08:00
parent eed57aa41a
commit 20f9fe12b0

View File

@@ -41,7 +41,15 @@ func getLocalIP() (string, error) {
return "", fmt.Errorf("无法找到本地IP地址") return "", fmt.Errorf("无法找到本地IP地址")
} }
func getInstanceAddrByIp(ctx context.Context, ip string, services []gsvc.Service) (addr string) {
for _, s := range services {
if s.GetEndpoints()[0].Host() == addr {
addr = s.GetEndpoints()[0].String()
return
}
}
return
}
func GetInstanceAddr(ctx context.Context, name string) (addr string, err error) { func GetInstanceAddr(ctx context.Context, name string) (addr string, err error) {
watch, err := gsvc.GetRegistry().Watch(ctx, name) watch, err := gsvc.GetRegistry().Watch(ctx, name)
service, err := watch.Proceed() service, err := watch.Proceed()
@@ -49,17 +57,21 @@ func GetInstanceAddr(ctx context.Context, name string) (addr string, err error)
err = errors.New("获取customerService服务实例失败") err = errors.New("获取customerService服务实例失败")
return return
} }
//优先使用gateway同IP的服务实例 //优先使用客户端IP获取实例(前后端在同一台机器调试)
addr = getInstanceAddrByIp(ctx, g.RequestFromCtx(ctx).GetRemoteIp(), service)
if !g.IsEmpty(addr) {
return
}
//优先使用gateway同IP的服务实例(前后端不同机器调试)
addr, err = getLocalIP() addr, err = getLocalIP()
if err != nil { if err != nil {
return return
} }
for _, s := range service { addr = getInstanceAddrByIp(ctx, addr, service)
if s.GetEndpoints()[0].Host() == addr { if !g.IsEmpty(addr) {
addr = s.GetEndpoints()[0].String()
return return
} }
} //随机获取一个服务实例
maxService := grand.N(0, len(service)-1) maxService := grand.N(0, len(service)-1)
addr = service[maxService].GetEndpoints()[0].String() addr = service[maxService].GetEndpoints()[0].String()
return return