服务在向eureka心跳报告时输出日志,从而监控排查服务的健康状态。
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.actuate.health.Health;
import org.springframework.boot.actuate.health.HealthIndicator;
import org.springframework.boot.actuate.health.Status;
import org.springframework.stereotype.Component;
import org.springframework.web.client.RestTemplate;
@Component
public class CustomeHealthIndicator implements HealthIndicator {
// @Autowired
// private RestTemplate template;
@Override
public Health health() {
return new Health.Builder(Status.UP).build();
/* String result = template.getForObject("http://localhost:9213/health", String.class);
if(StringUtils.isNotEmpty(result) & result.contains("UP")){
return new Health.Builder(Status.UP).build();
}else{
return new Health.Builder(Status.DOWN).build();
}*/
}
}
import com.netflix.appinfo.HealthCheckHandler;
import com.netflix.appinfo.InstanceInfo;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.boot.actuate.health.Status;
import com.netflix.appinfo.InstanceInfo.InstanceStatus;
import java.time.LocalDateTime;
@Component
@Slf4j
public class CustomHealthCheckHandler implements HealthCheckHandler {
@Autowired
CustomeHealthIndicator healthIndicator;
@Override
public InstanceInfo.InstanceStatus getStatus(InstanceInfo.InstanceStatus instanceStatus) {
log.error("{} 开始向注册中心发送心跳 ====================================", LocalDateTime.now());
Status s = healthIndicator.health().getStatus();
if(s.equals(Status.UP)) {
System.out.println("服务状态为UP");
return InstanceStatus.UP;
} else {
System.out.println("服务状态为DOWN");
return InstanceStatus.DOWN;
}
}
}
eureka:
instance:
statusPageUrlPath: /info
healthCheckUrlPath: /health
preferIpAddress: true
lease-expiration-duration-in-seconds: 180 #服务过期时间配置,超过这个时间没有接收到心跳EurekaServer就会将这个实例剔除(默认90秒)
client:
serviceUrl:
defaultZone: http://registry:8761/eureka/
healthcheck:
enabled: true
management:
endpoint:
health:
show-details: always #健康情况-展示全部详情,否则只展示status信息