eureka和springbootAdmin结合时, 工程运行一段时间就反复出现如下错误:
2023-07-19 14:02:32.439 ERROR 22050 --- [freshExecutor-0] d.c.b.a.s.c.d.InstanceDiscoveryListener : Couldn't register instance for discovered instance (serviceId=FACILITATOR, instanceId=test-reguler:facilitator:8781, url= http://test-reguler:8781)
java.lang.IllegalArgumentException: 'healthUrl' is not valid: /ksb-facilitator/actuator/health
原因直白的说就是healthUrl参数配置错误, 查看springbootAdmin源码, healthUrl参数需要是绝对地址.奇怪的是,服务之前没有出现过这个错误.且springbootAdmin后台所有服务都在.
经过回想最近改动点, 排查到fetchRegistry配置由之前的false改为了true.因为最近要部署高可用eureka.
fetchRegistry这个参数开启后, 在工程整合了springbootAdmin时,eureka会自动把获取到的微服务清单都同步注册到springbootAdmin, 而我们的微服务应用在 eureka.instance.health-check-url-path配置上有些特殊,有server.servlet.context-path前缀, 但eureka似乎没有做好兼容, 这个有时间再查源码比对, 可能还有配置开关可以控制不自动同步注册.
结论就是:eureka和springbootAdmin结合时, 开启fetchRegistry会自动注册,虽然方便但不知道的情况下各种报错反而是坑.
如下时修改过的正确配置: eureka: dashboard: enabled: false # 路径不能配置在/eureka/之下,否则不生效 path: '/eureka_dashboard' instance: prefer-ip-address: true appname: ${spring.application.name} client: registerWithEureka: true # 开启会一直报错Couldn't register instance for discovered instance, # 因为eureka会把获取到的微服务都同步注册到springbootAdmin,但微服务侧又没有适配过配置项导致注册失败 # 比如 eureka.instance.health-check-url-path配置错误, 这个待后期开启多个注册中心时,再优化 fetchRegistry: false serviceUrl: defaultZone: http://127.0.0.1:${server.port}/eureka/ server: enable-self-preservation: false # 关闭自我保护 eviction-interval-timer-in-ms: 5000 # 定时清理间隔 5秒 response-cache-update-interval-ms: 1000 # 响应缓存时间 1秒 use-read-only-response-cache: false # 禁用ReadOnlyMap缓存