Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/kubernetes/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring boot Eureka客户端的快速故障行为_Spring Boot_Kubernetes_Microservices_Netflix Eureka - Fatal编程技术网

Spring boot Eureka客户端的快速故障行为

Spring boot Eureka客户端的快速故障行为,spring-boot,kubernetes,microservices,netflix-eureka,Spring Boot,Kubernetes,Microservices,Netflix Eureka,这似乎没有共同的决定,我试图从另一个角度来解决它。微服务基础设施包括Spring Boot微服务和Eureka Zuul配置管理服务器作为服务网格。所有微服务都在Kubernetes平台的Docker容器中运行。Kubernetes监视应用程序运行状况检查(活动/就绪探测),并在运行状况检查处于关闭状态超过活动探测超时时重新部署它 问题如下-有时Microservice在重新部署后无法获得正确的Eureka服务器地址。服务发现注册失败,但Microservice继续使用运行状况检查“UP”,并且

这似乎没有共同的决定,我试图从另一个角度来解决它。微服务基础设施包括Spring Boot微服务和Eureka Zuul配置管理服务器作为服务网格。所有微服务都在Kubernetes平台的Docker容器中运行。Kubernetes监视应用程序运行状况检查(活动/就绪探测),并在运行状况检查处于关闭状态超过活动探测超时时重新部署它

问题如下-有时Microservice在重新部署后无法获得正确的Eureka服务器地址。服务发现注册失败,但Microservice继续使用运行状况检查
“UP”
,并且依赖的Microservice会错过它

微服务是相互依赖的,一个微服务的故障会导致所有相关微服务的级联故障。由于某些原因,我不使用Histrix,实际上它并不能解决我的问题——失败的微服务丢失的数据只是禁用了与依赖微服务集相关的整个功能

问题:是否可以在不编写自定义HealthIndicator的情况下为Eureka客户端配置类似“fail-fast”的行为?当Eureka客户端未从Eureka获得
204
成功注册响应时,致动器健康检查应处于
'DOWN'
状态

下面是一个我如何在代码中修复它的示例。它的行为非常简单-healthcheck在启动或/或运行时超过在Eureka中成功注册的超时时间后“永远”停止。主要目标是,当liveness probe超时超过时,Kubernetes将重新部署微服务

@组件
公共类CustomHealthIndicator实现HealthIndicator{
私有静态最终记录器Logger=LoggerFactory.getLogger(CustomHealthIndicator.class);
@自动连线
@限定词(“eurekaClient”)
私人EurekaClient EurekaClient;
私有静态最终整数健康检查下限最小值=15;
私有LocalDateTime healthCheckDownTimeLimit=getHealthCheckDownLimit();
@凌驾
公共卫生(){
int errCode=registeredInEureka();
返回错误代码!=0
?Health.down().withDetail(“Eureka注册失败”,errCode.build())
:Health.up().build();
}
私有int registeredInEureka(){
int status=0;
if(isStatusUp()){
healthCheckDownTimeLimit=getHealthCheckDownLimit();
}else if(LocalDateTime.now().isAfter(healthCheckDownTimeLimit)){
logger.error(“超过了在Eureka中获取“UP”状态的{}min.限制”,健康检查\u DOWN\u限制\u min);
status=HttpStatus.GONE.value();
}
返回状态;
}
私有布尔值isStatusUp(){
返回eurekaClient.getInstanceRemoteStatus().compareTo(InstanceInfo.InstanceStatus.UP)=0;
}
私有LocalDateTime getHealthCheckDownLimit(){
返回LocalDateTime.now();
}
}
仅仅通过配置Spring组件就可以做到这一点吗