Spring Cloud Eureka之单节点设置prefer-ip-address为true导致自己注册为自己的Replicas

  • Post author:
  • Post category:其他


参考:

SpringCloud从入门到进阶(三)——源码探究Eureka集群之replicas的unavailable故障

Eureka部署单节点配置如下:

spring:

application:

name: @project.name@

profiles:

active: @profileActive@

eureka:

instance:

prefer-ip-address: true #以IP地址注册到服务中心,相互注册使用IP地址

client:

register-with-eureka: false

fetch-registry: false

server:

port: 55555

info:

project:

name:  @project.name@

version: 1.0.0

prefer-ip-address设置为true以IP地址注册到服务中心,相互注册使用IP地址,访问注册中心页面DS Replicas模块中有一个实例为localhost。

PeerEurekaNodes.resolvePeerUrls会解析集群中其它节点的URL,值来自于eureka.client.serviceUrl配置。并判断当前Eureka实例URL是否在其中并剔除。由于prefer-ip-address设置为true以IP地址注册到服务中心,如果eureka.client.serviceUrl中配置的是hostname,在比较时拿IP和hostname比较自然不想等。对于Eureka单节点部署而言是拿IP和hostname比较自然不想等,出现上述情况。

参考:

Eureka配置问题

未配置eureka.client.serviceUrl.defaultZone值,EurekaClientConfigBean设置的默认值http://localhost:8761/eureka/不会被覆盖,

EurekaInstanceConfigBean实例化时通过InetUtils.findFirstNonLoopbackHostInfo()找到本机第一个非环回主机信息,hostname可能是IP而不是主机名。

在解析集群中其它节点URL时会比较URL中的host和当前机器的hostname是否相同,如果相同则认为是同一实例不会注册为自己的Replicas。

单节点部署单实例Eureka如下配置即可。

spring:

application:

name: @project.name@

profiles:

active: @profileActive@

eureka:

instance:

hostname: localhost

#  prefer-ip-address: true #以IP地址注册到服务中心,相互注册使用IP地址

client:

register-with-eureka: false

fetch-registry: false

serviceUrl:

defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka

server:

port: 55555

info:

project:

name:  @project.name@

version: 1.0.0

单节点部署为分布式Eureka集群,设置当前机器hostname为多个,不同节点eureka.instance.hostname设置为不同值,同时prefer-ip-address禁止设置为true,否则DS Replicas列表中会出现不应该出现的节点。



版权声明:本文为hjtlovelife原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。