gateway分配实例策略调整
This commit is contained in:
@@ -41,7 +41,15 @@ func getLocalIP() (string, error) {
|
||||
|
||||
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) {
|
||||
watch, err := gsvc.GetRegistry().Watch(ctx, name)
|
||||
service, err := watch.Proceed()
|
||||
@@ -49,17 +57,21 @@ func GetInstanceAddr(ctx context.Context, name string) (addr string, err error)
|
||||
err = errors.New("获取customerService服务实例失败!")
|
||||
return
|
||||
}
|
||||
//优先使用gateway同IP的服务实例
|
||||
//优先使用客户端IP获取实例(前后端在同一台机器调试)
|
||||
addr = getInstanceAddrByIp(ctx, g.RequestFromCtx(ctx).GetRemoteIp(), service)
|
||||
if !g.IsEmpty(addr) {
|
||||
return
|
||||
}
|
||||
//优先使用gateway同IP的服务实例(前后端不同机器调试)
|
||||
addr, err = getLocalIP()
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
for _, s := range service {
|
||||
if s.GetEndpoints()[0].Host() == addr {
|
||||
addr = s.GetEndpoints()[0].String()
|
||||
addr = getInstanceAddrByIp(ctx, addr, service)
|
||||
if !g.IsEmpty(addr) {
|
||||
return
|
||||
}
|
||||
}
|
||||
//随机获取一个服务实例
|
||||
maxService := grand.N(0, len(service)-1)
|
||||
addr = service[maxService].GetEndpoints()[0].String()
|
||||
return
|
||||
|
||||
Reference in New Issue
Block a user