默认状况下注册到eureka server的服务是经过心跳来告知本身是UP仍是DOWN,并非经过spring-boot-actuator模块的/health端点来实现的,这样其实不是很合理。java
默认的心跳实现方式能够有效的检查eureka客户端进程是否正常运做,可是没法保证客户端应用可以正常提供服务。因为大多数微服务应用都会有一些其余的外部资源依赖,好比数据库,REDIS缓存等,若是咱们的应用与这些外部资源没法连通的时候,实际上已经不能提供正常的对外服务了,但由于客户端心跳依然在运行,因此它仍是会被服务消费者调用,而这样的调用实际上并不能得到预期的后果。web
咱们能够经过在eureka客户端中配置:eureka.client.healthcheck.enabled=true,就能够改变eureka server对客户端健康检测的方式,改用actuator的/health端点来检测。spring
咱们在前面的ribbon consumer样例工程中添加一个自定义的HealthIndicator:数据库
packagecom.example.eurekaclientconsumerribbon.health;
importorg.springframework.boot.actuate.health.Health;
importorg.springframework.boot.actuate.health.HealthIndicator;
importorg.springframework.stereotype.Component;
@Component
publicclassMyHealthCheckerimplementsHealthIndicator {
privatebooleanup =true;
@Override
publicHealth health() {
if(up) {
returnnewHealth.Builder().withDetail("aaa_cnt",10)//自定义监控内容
.withDetail("bbb_status","up").up().build();
} else{
returnnewHealth.Builder().withDetai