服务可以在consul看到但是一直红叉显示All service checks failing
consul 控制台一直提示
2024-04-07T19:36:19.680+0800 [WARN] agent.http: This request used the token query parameter which is deprecated and will be removed in a future Consul version: logUrl="/v1/catalog/services?wait=2s&index=19&token=<hidden>"
排查思路
一开始看控制台的WARN,看到有token的字眼还以为要配置token,尝试配置了token还是不行,后来看了程序的日志发现打印了一条日志
2024-04-07T19:47:11.812+08:00 INFO 20956 --- [ main] o.s.c.c.s.ConsulServiceRegistry : Registering service with consul: NewService{id='consumer-8002', name='consumer', tags=[], address='localhost', meta={secure=false}, port=8002, enableTagOverride=null, check=Check{script='null', dockerContainerID='null', shell='null', interval='10s', ttl='null', http='http://localhost:8002/actuator/health', method='null', header={}, tcp='null', timeout='null', deregisterCriticalServiceAfter='null', tlsSkipVerify=null, status='null', grpc='null', grpcUseTLS=null}, checks=null}
里面的check{http=‘http://localhost:8002/actuator/health’} 一你了我的注意,/actuator/health这个很熟悉是spring-boot-starter-actuator的一个健康检查接口
解决
①引入spring-boot-starter-actuator 服务注册上去后consul会检查这个接口来判断服务是否存活
②如果不想引入spring-boot-starter-actuator可以自己自定义一个接口,然后再配置文件配置健康检查的路径就行
spring:
application:
name: consumer
cloud:
consul:
host: localhost
port: 8500
discovery:
# 配置健康检查路径 默认是/actuator/health
health-check-path: /actuator/health