本文概述
- 容错能力
- Hystrix
微服务的实例可能会频繁地上下波动。随着微服务之间交互次数的增加, 系统中微服务失败的机会也随之增加。
容错能力 考虑一个场景, 其中六个微服务相互通信。微服务5有时会关闭, 而其他所有微服务都直接或间接依赖于它, 因此所有其他服务也会关闭。
解决此问题的方法是在微服务失败的情况下使用回退。微服务的这一方面称为容错。
文章图片
容错可以借助断路器来实现。这是一种将请求包装到外部服务并检测它们何时失败的模式。如果检测到故障, 则断路器断开。所有后续请求均立即返回错误, 而不是向运行状况不佳的服务发出请求。它监视并检测已关闭的服务以及与其他服务不当的服务。它拒绝呼叫, 直到再次恢复正常。
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.srcmini.microservices.limitsservice;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.hystrix.EnableHystrix;
@SpringBootApplication@EnableHystrixpublic 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 methodpublic LimitConfiguration fallbackRetrieveConfigurations(){//returning the default configuration return new LimitConfiguration(999, 9);
}
让我们了解上述方法中发生了什么。
在上述方法中, 我们创建了Get映射以实现容错功能。在下一行中, 我们使用了注释@HystrixCommand来配置fallback方法。我们定义了一个名为fallbackRetrieveConfigurations()的方法, 如果发生任何故障, 该方法将返回默认值。
后备方法
fallback方法是在发生故障时调用的方法。 Hystrix允许我们为每种服务方法定义一个备用方法。这里出现一个问题, 如果该方法引发异常, 应该返回给使用者什么?
因此答案是, 如果retrieveConfiguraions()失败, 则将调用fallbackRetrieveConfigurations()方法。 fallback方法返回硬编码的LimitConfiguration实例。
【Hystrix的容错能力示例分析】步骤4:打开浏览器并调用URL http:// localhost:8080 / fault-tolerance-example。它返回我们在fallbackRetrieveConfigurations()方法中返回的值。
文章图片
推荐阅读
- springboot情操陶冶-@SpringBootApplication注解解析
- 实现Spring Cloud Bus详细步骤
- 使用Eureka和Ribbon分配调用详细步骤
- 使用Zipkin进行分布式跟踪示例图解
- Spring Cloud将微服务连接到Zipkin示例
- 使用Feign REST客户端进行服务调用
- 什么是Spring Cloud()
- Spring Cloud教程入门介绍
- Spring Cloud和Spring Boot之间有什么区别()