📅  最后修改于: 2021-01-07 03:54:12             🧑  作者: Mango
微服务必须非常可靠,因为它们彼此依赖。微服务架构包含大量的小型微服务。这些微服务相互通信以便满足其需求。
微服务的实例可能会频繁地上下波动。随着微服务之间交互次数的增加,系统中微服务失败的机会也随之增加。
考虑一个场景,其中六个微服务相互通信。微服务5有时会关闭,而其他所有微服务都直接或间接依赖它,因此所有其他服务也都关闭了。
解决此问题的方法是在微服务失败的情况下使用回退。微服务的这一方面称为容错。
借助断路器可以实现容错功能。它是一种将请求包装到外部服务并检测它们何时失败的模式。如果检测到故障,则断路器断开。所有后续请求都立即返回错误,而不是向运行状况不佳的服务发出请求。它监视并检测已关闭的服务以及与其他服务行为不正常的服务。它拒绝呼叫,直到再次恢复健康。
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()方法中返回的值。