Java--SpringCloud-4-Netflix-4-Hystrix

简介: Hystrix 就是断路器,也叫熔断器。

Hystrix 就是断路器,也叫熔断器。

       在分布式系统中有很多的模块相互之间进行交互,如果其中的一个出现了问题,那么就会影响整个流程,导致整个服务出现故障。假如某一个模块无法正常工作时,能够通过我们提前配置的容错措施来使得整个系统能够继续正常运行,这样就可以在单个模块出问题时及时熔断该链路,不影响整个系统的运行。

       Spring Cloud 断路器提供了跨不同断路器实现的抽象。

支持的实现

Netfix Hystrix

Resilience4J

Sentinel

Spring Retry

       现在我们的一个8080端口服务宕机了,我们@HystrixCommand(fallbackMethod = "error")注解来捕捉到这个事件。

代码实现一下

一、直接使用上篇的eureka client服务,加入hystrix依赖

<?xmlversion="1.0"encoding="UTF-8"?><projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>com.xing</groupId><artifactId>StudyCloud</artifactId><version>0.0.1-SNAPSHOT</version></parent><artifactId>StudyCloud-eureka-client</artifactId><version>0.0.1-SNAPSHOT</version><dependencies><!--web组件--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!--eurekaclient组件--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-hystrix</artifactId></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>

二、启动类中加@EnableCircuitBreaker注解启动熔断器

packagecom.xing.study.cloud.eureka;
importcom.netflix.hystrix.contrib.javanica.annotation.HystrixCommand;
importorg.springframework.boot.SpringApplication;
importorg.springframework.boot.autoconfigure.SpringBootApplication;
importorg.springframework.cloud.client.circuitbreaker.EnableCircuitBreaker;
importorg.springframework.cloud.netflix.eureka.EnableEurekaClient;
importorg.springframework.web.bind.annotation.RequestMapping;
importorg.springframework.web.bind.annotation.RestController;
importorg.springframework.web.client.RestTemplate;
/*** @author rt*/@RestController@SpringBootApplication@EnableEurekaClient@EnableCircuitBreakerpublicclassApplication {
@RequestMapping("/")
publicStringhome() {
return"Hello World";
    }
@HystrixCommand(fallbackMethod="error")
@RequestMapping("/hystrix")
publicStringhystrix() {
returnnewRestTemplate().getForObject("http://127.0.0.1:8080/",String.class);
    }
/***  回调方法* @return str*/publicStringerror(){
return"/hystrix调用8080端口地址失败拉,回调error方法";
    }
publicstaticvoidmain(String[] args) {
SpringApplication.run(Application.class, args);
    }
}

       配置文件还是保持上篇的

spring.application.name=eureka-client1server.port=8882eureka.instance.instance-id=eureka-client1eureka.client.service-url.defaultZone=http://172.23.13.15:8881/eureka/eureka.client.register-with-eureka=trueeureka.client.fetch-registry=true

三、启动服务(记得要启动Eureka Server项目)

       访问发布的接口:http://127.0.0.1:8882/hystrix

image.png

       可以看到在一定时间后,跳到了error()方法,我们就可以在error方法中进行回退、降级、缓存结果啥的,有兴趣可以继续往深学学。

       目前hystrix已经停止更新了,以后使用的话再好好学习。


CircuitBreakerFactory.create API将创建一个名为CircuitBreaker的类的实例 。

该run方法需要Supplier和aFunction。

Supplier是您要包装在断路器中的代码。

Function是如果断路器跳闸将执行的回调方法。

将传递Throwable导致触发回退的函数。

如果不想提供回退,可以选择排除回退。

     


END

目录
相关文章
|
7月前
|
人工智能 监控 算法
智能时代的教育智慧:奏响技术与人文的和谐乐章
在智能时代,教育正经历数字化变革。AI批改作业、虚拟现实重构课堂,技术带来便利的同时也引发隐忧:过度数据化可能削弱深度思考能力。教育本质在于促进全面发展,教师需引导学生掌握智能工具,同时保有人文精神与批判性思维。生成式人工智能认证(GAI认证)等新兴技能框架,为未来职场提供竞争力。站在教育十字路口,把握技术理性与人文精神的平衡至关重要,以培养全面发展的人才。
|
7月前
|
Arthas 监控 Java
Arthas sc(查看JVM已加载的类信息 )
Arthas sc(查看JVM已加载的类信息 )
422 9
|
JSON 数据格式
成功解决:Vscode中切换table页面会自动覆盖上一个问题
这篇文章分享了作者在VSCode中遇到的一个问题,即在切换Tab页面时原先的页面被自动覆盖,并通过修改设置`workbench.editor.enablePreview`解决了这个问题,使得点击文件时不再覆盖当前页面。
成功解决:Vscode中切换table页面会自动覆盖上一个问题
|
容器
在 Flex 布局中,如何设置元素在侧轴上的初始对齐方式?
【10月更文挑战第22天】同时,还可以进一步探索其他 Flex 布局相关的属性和技巧,以更好地掌握 Flex 布局的强大功能,创造出更具创意和适应性的页面布局。
385 2
|
Python
[python]使用gunicorn部署fastapi服务
【8月更文挑战第6天】以下是使用`gunicorn`部署`FastAPI`服务的简要步骤:首先安装`FastAPI`与`gunicorn`;创建一个简单的`FastAPI`应用,例如定义根路径返回&quot;Hello World&quot;;保存代码为`main.py`;在应用目录中启动`gunicorn`服务,如`gunicorn main:app -w 4 -b 0.0.0.0:8000`,其中`-w 4`指定4个工作进程,`-b`绑定至所有IP的8000端口。这样就完成了基础部署,可通过`http://服务器IP:8000/`访问应用。
565 0
|
前端开发
Request获取Map集合,提取username后面的值方法,post和get提取集合的方法
Request获取Map集合,提取username后面的值方法,post和get提取集合的方法
|
安全 编译器
LambdaQueryWrapper 和 QueryWrapper区别及案例
LambdaQueryWrapper 和 QueryWrapper区别及案例
1305 1
|
算法 区块链
DAPP算力质押分红系统开发|方案设计|需求细节
“去中心化”好像是最近一个热门的“新词汇”,相信关注区块链领域的朋友会经常听到这么一个词。
下一篇
oss云网关配置