SpringCloud Hystrix

Hystrix的容错能力

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

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

 

容错

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

此问题的解决方案是为了在微服务失败时使用 fallback 。微服务的这一方面称为 容错

Hystrix的容错<

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

 

Hystrix

Hystrix是一个库,用于控制微服务之间的交互以提供延迟和容错能力。此外,可以通过修改UI来让用户知道某些事情可能无法按预期工作或需要花费更多时间。

使用Hystrix实现容错功能

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

<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>

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

LimitsServicesApplication.java

package com.codebaoku.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()方法中返回的值。

Hystrix的容错功能