Hystrix断路器(熔断器)
是一种保护机制。
服务熔断
在生产者方进行使用。
演示代码:
生产者的基本代码不再赘述。下面只写与Hystrix有关的代码。
首先引入相关依赖:
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-hystrix</artifactId><version>1.4.7.RELEASE</version></dependency>
生产者相关controller代码:
@RestController
@RequestMapping("/user")
public class UserController {@Resourceprivate UserMapper userMapper;@Resource(name = "userServiceImpl")private UserService userService;@Autowiredprivate DiscoveryClient discoveryClient;@GetMapping("/getAllUser")//一旦方法出现异常或者超时,就会调用fallbackMethod指定的方法@HystrixCommand(fallbackMethod = "getById")public String getAllUser() {List<User> users = userMapper.selectList(null);String jsonString = JSONObject.toJSONString(users);if (jsonString != null) {throw new RuntimeException("抱歉~没有此条记录---");}return jsonString;}public String getById() {User byId = userService.getById(1458679378555813890L);String s = JSONObject.toJSONString(byId);return "@HystrixCommand--抱歉只有如下记录:" + "\t" + s;}}
注意:在需要有熔断的方法之上一定要加 @HystrixCommand 注解。此注解不适用于类。
其中:fallbackMethod 指的是当前请求出现失败或者超时、方法异常等情况时的调用方法。
启动类代码:
@MapperScan("com.hwj.springcloudeurekaclienthystrix")
@EnableEurekaClient //本服务启动后,自动注册进Eureka
@SpringBootApplication
@EnableDiscoveryClient //服务发现
@EnableCircuitBreaker//Hystrix熔断器
public class SpringCloudEurekaClientHystrix {public static void main(String[] args) {SpringApplication.run(SpringCloudEurekaClientHystrix.class, args);}
}
注意:一定要加 @EnableCircuitBreaker Hystrix熔断器注解。
到此,服务熔断已经实现。
服务降级
是什么:
整体资源空间即将到达上限,先暂时关闭掉某些服务,等资源空间松缓以后再启动。
服务降级处理是在客户端完成的,与服务端没有关系。
步骤:
1、新建一个feign接口并补充好内容。
2、在feign接口上添加 @FeignClient(name="xxx",fallbackFactory = yyy.class) 注解。含义为:给服务名为xxx的服务设置服务降级时执行的内容。
/*** @author HWJ* @date 2021-11-14*/
@FeignClient(name = "PROVIDERCRUD",fallbackFactory = UserClientFeignFactory.class)
public interface UserClientFeignService {@GetMapping(value = "/user/getAllUser")public String userList();
}
3、新建一个类,实现 FallbackFactory<T>接口,其中T指的是feign接口,并重写其方法。
/*** @author HWJ* @date 2021-11-15*/
@Component
public class UserClientFeignFactory implements FallbackFactory<UserClientFeignService> {@Overridepublic UserClientFeignService create(Throwable throwable) {return new UserClientFeignService() {@Overridepublic String userList() {return "此服务已停用!";}};}
}
注意,一定要此在类上加@Component注解。
此类含义:当feign接口中,该方法执行出现异常或者超时等不能正常返回结果的情况时,
返回 此类 该方法中 对应的内容。
4、在feign消费者端的application.yml中,添加如下代码:
## 启动feign中的hystrix组件
feign:hystrix:enabled: true
5、在feign消费者端启动类上修改:
@SpringBootApplication(scanBasePackages = {"com.hwj.sggapi.service","com.hwj.springcloudfeign.controller"})
@EnableEurekaClient
@EnableFeignClients(basePackages = "com.hwj.sggapi.service")
public class SpringCloudTestSGGFeign {public static void main(String[] args) {SpringApplication.run(SpringCloudTestSGGFeign.class,args);}
}
扫描包,将加 @Component 注解的类添加到spring。
扫描本身的controller包。
至此,服务降级完成。
PS:
1、服务熔断与服务降级的区别?
服务熔断:所谓服务熔断就是某个服务请求出现问题时,直接返回定义好的 fallbackMethod 或者fallbackFactory 。
服务降级:就是某一个分布式系统中,有a,b,c三个服务。但是某一天,a服务的访问量特别多,造成系统资源的短缺。这时候为了节约系统资源给a,就需要关闭除a以外的某个服务或者某些服务。此为片面上的服务降级。
2、引入依赖注意:feign接口引入openfeign不要引入feign。
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId><version>版本</version></dependency>
要引入openfeign,不要引入feign。要不然没有
feign:
hystrix:
enabled: true
Hystrix断路器(熔断器)相关推荐
- Spring Cloud构建微服务架构:服务容错保护(Hystrix断路器)【Dalston版】
前言 在前两篇<Spring Cloud构建微服务架构:服务容错保护(Hystrix服务降级)>和<Spring Cloud构建微服务架构:服务容错保护(Hystrix依赖隔离)&g ...
- Hystrix断路器执行原理
深入 Hystrix 断路器执行原理 Hystrix熔断机制,用于监控微服务调用情况,当失败的情况达到预定的阈值(5秒失败20次),会打开断路器,拒绝所有请求,直到服务恢复正常为止. circuitB ...
- Netflix Hystrix断路器简介与工作原理
一.前言? 1.Netflix Hystrix断路器是什么? Netflix Hystrix是SOA/微服务架构中提供服务隔离.熔断.降级机制的工具/框架.Netflix Hystrix是断路器的一种 ...
- 微服务——Hystrix断路器(豪猪哥)
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 概述 分布式系统面临的问题 是什么 能干嘛 Hystrix重要概念 服务降级(fallback) 哪些情况会触发降级 服务熔 ...
- Hystrix面试 - 深入 Hystrix 断路器执行原理
Hystrix面试 - 深入 Hystrix 断路器执行原理 RequestVolumeThreshold HystrixCommandProperties.Setter().withCircuitB ...
- SpringCloud中 Feign结合Hystrix断路器开发。
Feign结合Hystrix断路器开发: 转载于:https://www.cnblogs.com/longdb/p/10468371.html
- 五、Hystrix断路器
Hystrix断路器 概述 分布式系统面临的问题 复杂分布式体系结构中的应用程序有数十个依赖关系,每一个依赖关系在某些时候将不可避免的失败. 服务雪崩 多个微服务之间调用的时候,假如微服务A调用微服务 ...
- Hystrix断路器原理及实现(服务降级、熔断、限流)
Hystrix断路器原理及实现(服务降级.熔断.限流) 分布式系统面临的问题 Hystrix重要概念(面试常考) Hystrix案例 Hystrix 服务提供者 Hystrix 服务消费者 原因与解决 ...
- SpringCloud07 - Hystrix 断路器
扯淡: 服务与服务之间有业务关联就需要调用,当被调用的服务发生故障(上线后多半是由于网路原因导致连接超时),必然会波及到服务调用者.通俗讲,断路器就是在低层级的服务发生故障时将服务间的连接断开. 个人 ...
- SpringClound——Hystrix断路器
SpringCloud学习资料汇总超级棒的 如上是我在看文章时忽然看到的一个很好的学习SpringCloud的网站 SpringClound--微服务概述--史上最烂 SpringClound--Sp ...
最新文章
- python和r语言比较_Python和R语言之分析对比 - 数据分析
- FPGA学习之路—接口(2)—I2C协议详解+Verilog源码分析
- apache ranger_Apache Ranger插件的美丽简洁
- 90年代微型计算机,版本控制如何在80年代和90年代的当今微型计算机上工作?
- android广播示例,android接受开机广播事件
- 黑客攻防技术宝典web实战篇:利用信息泄露习题
- [WCF]终结点与服务寻址(一)
- Apisonic Labs Speedrum Mac - MPC风格虚拟鼓采样器
- php 开源邮件系统,企业级开源邮件系统搭建的全过程
- java程序用maven打包的命令
- XCode7 iOS8.X Simulator 离线下载地址
- 华工历次数学实验源代码
- word调整标题编号
- PDF文件删除空白页
- HTML+CSS绘制太阳系九大行星运行轨迹
- Dilated Convolution膨胀卷积感受野详解
- group by 分组后 再对所有的数据求和
- “蔚来杯“2022牛客暑期多校训练营8
- 国密算法的ekey的使用--简述
- 训练数据,验证数据和测试数据
热门文章
- 上手Coc.nvim 完全指南
- 材料计算:电催化系列2——隐式溶剂效应、恒电势方法、OER台阶图、催化火山图、布拜图
- 为什么白板面试总是过不了
- Hbase面试题(持续更新)
- 大数据Hbase 面试题
- JS异步编程之Generator
- 核心频率个加速频率_255W TDP不算啥,英特尔14核酷睿i9-9990XE处理器全核加速5.0GHz...
- 【Python】基于Python的机器学习回归:可视化、预测及预测结果保存(附代码)
- 使用SQL.js访问SQLite
- 塑造价值的力量 | 摸鱼系列