Spring Cloud Consul HTTP健康检查自动注册失效问题求助
从你提供的注册日志来看,Consul注册的服务检查是script类型而非手册3.2节描述的默认HTTP类型,且http和interval属性为null,这说明默认的HTTP健康检查逻辑没有被正确触发,下面是几个关键的排查和修复步骤:
检查是否意外覆盖了健康检查类型
如果你在配置文件(application.yml/application.properties)中设置了consul.discovery.health-check.script属性(哪怕是设为null),Consul客户端会优先使用script类型的检查,直接覆盖默认的HTTP检查逻辑。请务必移除这类配置,让系统走默认流程:# 错误示例,会覆盖默认HTTP检查,需删除 # consul: # discovery: # health-check: # script: null确认Actuator端点配置是否正确
Spring Cloud Consul默认的HTTP健康检查依赖Spring Boot Actuator的/health端点,你需要确保:- 项目中引入了
spring-boot-starter-actuator依赖 - 在配置中正确暴露health端点:
management: endpoints: web: exposure: include: health endpoint: health: show-details: always # 可选,方便排查健康状态详情
- 项目中引入了
显式配置HTTP健康检查参数(兜底方案)
如果默认逻辑依然不生效,可以直接显式指定HTTP检查的配置,强制Consul使用HTTP类型的健康检查:consul: discovery: health-check: enabled: true http: http://localhost:8081/health # 替换为你的服务实际地址+health端点 interval: 10s # 与手册默认值保持一致 timeout: 5s # 可选,按需设置检查超时时间验证版本兼容性
确保你的Spring Cloud版本与Consul客户端版本匹配,部分旧版本可能存在默认健康检查逻辑的bug。比如Spring Cloud 2022.0.x(Kilburn)对应Consul客户端1.5.x+,版本不匹配可能导致默认配置无法生效。
补充:从你的注册日志里
Check{script='nu...'的内容来看,大概率是配置中存在对health-check.script的错误设置——哪怕是无意将其设为null,都会让Consul客户端切换到script检查模式,而非默认的HTTP模式,建议优先排查这个点。
内容的提问来源于stack exchange,提问作者Erwin de Gier

