最近学习 spring cloud 微服务实战 的 eureka server 高可用性,提示 unavailable-replicas。

当时项目下有3个属性文件 



各属性文件配置如下:

application.properties

server.port=1111
eureka.instance.hostname=localhost

#默认设置下,服务注册中心也会将自己作为客户端来尝试注册自己,这里禁用它的客户端注册行为
eureka.client.register-with-eureka=false

#由于注册中心的职责就是维护服务实例,它并不需要去检索服务,所以也设置为false
eureka.client.fetch-registry=false

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


application-peer1.properties


spring.application.name=eureka-server
server.port=1111
eureka.instance.hostname=peer1
spring.profiles.active=peer1
eureka.client.serviceUrl.defaultZone=http://peer2:1112/eureka/

application-peer2.properties

spring.application.name=eureka-server
server.port=1112
eureka.instance.hostname=peer2
spring.profiles.active=peer2
eureka.client.serviceUrl.defaultZone=http://peer1:1111/eureka/



启动

java -jar eureka-server-1.0.0.jar --spring.profiles.active = peerl
java -jar eureka-server-1.0.0.jar --spring.profiles.active = peer2


地址栏输入 http://peer1:1111

发现 peer2 为 unavailable-replicas




启动服务时虽然采用  --spring.profiles.active = peerl 指定了配置文件,但还是会从 application.properties 中取值,将application.properties的

eureka.client.register-with-eureka=false
eureka.client.fetch-registry=false
注释掉或者 在 application-peer1.properties 与 application-peer2.properties 中显示 指定 这两个属性值为true即可。

另 application-peer1.properties 与 application-peer2.properties  的 spring.application.name属性不一致也会有此问题。


附spring cloud属性加载顺序:




参考:《Spring Cloud 微服务实战》

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐