📜  Hystrix的容错功能

📅  最后修改于: 2021-01-07 03:54:12             🧑  作者: Mango

Hystrix的容错

微服务必须非常可靠,因为它们彼此依赖。微服务架构包含大量的小型微服务。这些微服务相互通信以便满足其需求。

微服务的实例可能会频繁地上下波动。随着微服务之间交互次数的增加,系统中微服务失败的机会也随之增加。

容错能力

考虑一个场景,其中六个微服务相互通信。微服务5有时会关闭,而其他所有微服务都直接或间接依赖它,因此所有其他服务也都关闭了。

解决此问题的方法是在微服务失败的情况下使用回退。微服务的这一方面称为容错

借助断路器可以实现容错功能。它是一种将请求包装到外部服务并检测它们何时失败的模式。如果检测到故障,则断路器断开。所有后续请求都立即返回错误,而不是向运行状况不佳的服务发出请求。它监视并检测已关闭的服务以及与其他服务行为不正常的服务。它拒绝呼叫,直到再次恢复健康。

Hystrix

Hystrix是一个库,用于控制微服务之间的交互以提供延迟和容错能力。此外,有意义的是修改UI,以使用户知道某些内容可能未按预期工作或将花费更多时间。

使用Hystrix实现容错

步骤1:打开limits-service的pom.xml文件并添加Hystrix依赖项


org.springframework.cloud
spring-cloud-starter-netflix-hystrix

步骤2:打开LimitsServicesApplication.java文件,并使用批注@EnableHystrix启用Hystrix。

LimitsServicesApplication.java

package com.javatpoint.microservices.limitsservice;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.hystrix.EnableHystrix;
@SpringBootApplication
@EnableHystrix
public class LimitsServiceApplication 
{
public static void main(String[] args) 
{
SpringApplication.run(LimitsServiceApplication.class, args);
}
}

步骤3:打开LimitsConfigurationController.java文件并创建Get方法。

@GetMapping("/fault-tolerance-example")
//configuring a fallback method
@HystrixCommand(fallbackMethod="fallbackRetrieveConfigurations")
public LimitConfiguration retrieveConfigurations()
{
throw new RuntimeException("Not Available"); 
}
//defining the fallback method
public LimitConfiguration fallbackRetrieveConfigurations()
{
//returning the default configuration    
return new LimitConfiguration(999, 9); 
}

让我们了解上述方法中发生了什么。

在上述方法中,我们创建了Get映射以实现容错功能。在下一行中,我们使用了注释@HystrixCommand来配置fallback方法。我们定义了一个名为fallbackRetrieveConfigurations()的方法,如果发生任何故障,该方法将返回默认值。

后备方法

fallback方法是在发生故障时调用的方法。 Hystrix允许我们为每种服务方法定义一个备用方法。这里出现一个问题,如果该方法引发异常,应该返回给使用者什么?

因此答案是,如果retrieveConfiguraions()失败,则将调用fallbackRetrieveConfigurations()方法。 fallback方法返回硬编码的LimitConfiguration实例。

步骤4:打开浏览器并调用URL http:// localhost:8080 / fault-tolerance-example 。它返回我们在fallbackRetrieveConfigurations()方法中返回的值。