Eureka显示down,但是访问health的状态显示为UP,怎么解决

1 背景描述

近期遇到一个和Eureka相关的,非常棘手的问题.从服务日志来看,没有任何问题.但尤其奇怪的是,会出现服务突然注册不上eureka的情况.而对于前端而言,必须通过zuul才可以访问到后端服务.一旦服务在Eureka上没有注册成功或者突然down掉了,那么前端调用就会失败.
本文记录探索过程,希望可以给大家一些参考.
Springboot版本: 1.5.3.Release
Springcloud版本: Dalston.SR1

1.1 Eureka显示为down(1)

如图所示
在这里插入图片描述

1.2 health状态为UP

如图所示
在这里插入图片描述

1.3 在线文档也可正常访问

如图所示
在这里插入图片描述

1.4 依然发送心跳

在这里插入图片描述

2 相关措施

2.1 更改服务的健康检测方式
2.1.1 操作步骤

将eureka健康检查由一般的心跳检查,更改为actuator的health方式,具体分为两步:

  • 引入依赖
 <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
  • 增加配置
eureka.client.healthcheck.enabled=true
2.1.2 操作结果

并没有达到效果,通过/health与/eureka/apps/查到的状态依旧不一致.原因未知…待续

健康检查探针是一种用于定期检测远程服务是否可用的技术,通常在分布式系统或微服务架构中使用。在Java中,特别是Spring Boot等框架中,我们可以定义一个HTTP GET请求作为存活状态检查,这个请求应该简单、无副作用,并能快速响应。 以下是创建一个简单的Java HTTP存活检查探针的步骤: 1. 使用Spring Cloud Actuator库:这个库提供了一些内置的健康检查机制。首先,在你的pom.xml文件中添加Actuator依赖: ```xml <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> ``` 2. 创建一个HealthIndicator实现类:例如,你可以创建一个名为`MyServiceHealthIndicator`的类,继承自`HealthIndicator`接口,并实现`health()`方法,该方法应返回一个表示服务健康状况的`Health`对象。 ```java import org.springframework.boot.actuate.health.Health; import org.springframework.boot.actuate.health.Status; public class MyServiceHealthIndicator implements HealthIndicator { @Override public Health health() { try { // 这里模拟对服务API的调用,如果成功则返回Status.UP,失败则返回其他状态 // 示例:假设我们正在检查一个REST API,可以使用RestTemplate或FeignClient String response = restTemplate.getForObject("http://your-service-url/health", String.class); if (response.contains("UP")) { return Health.up().withDetail("status", "UP").build(); } else { return Health.down().withDetail("status", "DOWN").build(); } } catch (Exception e) { return Health.status(Status.DOWN).withDetail("error", e.getMessage()).build(); } } } ``` 3. 配置Eureka客户端:在application.yml或其他配置文件中注册你的健康检查探针,让它自动上报到Eureka或Hystrix这样的监控中心。 ```yaml eureka: client: serviceUrl: defaultZone: http://localhost:8761/eureka/ management: health: defaults: enabled: true indicators: my-service-health-indicator: enabled: true ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值