在使用spring cloud 配置eureka 高可用配置时.发现配置的节点一直无法获取心跳.
eureka控制台界面上一直显示的挂载节点 是 unavailable-replicas
查看日志.就是获取心跳的地址不对. 默认的健康检查HealthCheckUrl 地址是
http://peer1:8200/actuator/health
而一般的教程或者书上在配置注册中心时基本都用的
defaultZone: http://peer2:8200/eureka
这就有问题了. 明显地址是加了 /eureka 的上下文的.但是心跳地址没有上下文..
网上搜了一下,很多人的解决方案就是重新配置HealthCheckUrl 地址成正确地址.
我觉得这种只是在补窟窿. down下路源码看了后.发现了一个eureka的bug..
查看类 org.springframework.cloud.netflix.eureka.EurekaClientAutoConfiguration 的第122行 String serverContextPath = this.env.getProperty("server.context-path", "/");
而 在构造默认的health地址的时候 DefaultManagementMetadataProvider 类里第26 拼的上下文 就是这个context-path
eureka获取的上下文还是用的过时的配置 server.context-path
我配置文件里 ,最新spring boot的context配置项应该是 server.servlet.context-path. 不然idea会提示错误.
唉.eureka的源码里写死了. 没有办法...只好再加了一个 过时配置
server.context-path =/eureka
问题解决