gateway分配实例策略调整
This commit is contained in:
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user