第十七节--Hystrix服务熔断
是什么?
是应对雪崩效应的一种微服务链路保护机制。当某个微服务出错不可用或者响应时间太长时,会惊醒服务的降级,
进而熔断该节点微服务的调用,快速返回错误的响应信息
当检测到该节点微服务调用响应正常后,恢复调用链路(相当于调用响应短路之后会慢慢恢复正常)
Hutool工具包: Hutool是一个小而全的Java工具类库,通过静态方法封装,降低相关API的学习成本,提高工作效率,使Java拥有函数式语言般的优雅
具体文档看官网: https://www.hutool.cn/
在通用cloud-api-commos中引入hutool的依赖
<dependency> <groupId>cn.hutool</groupId> <artifactId>hutool-all</artifactId> <version>5.1.0</version> </dependency>
第一步:在工程cloud-provider-hystrix-payment8001上,controller类 //使用服务熔断:概述,在10秒内请求次数到达10以上,如果失败率达到60%之后直接跳闸 //ctrl+N:快速查找某个类 ,所有的配置都在HystrixCommandProperties类中 @HystrixCommand(fallbackMethod ="hystrixRongDuan",commandProperties = { @HystrixProperty(name = "circuitBreaker.enabled",value = "true"),//是否开启断路器 @HystrixProperty(name = "circuitBreaker.requestVolumeThreshold",value = "10"),//请求次数 @HystrixProperty(name = "circuitBreaker.sleepWindowInMilliseconds",value = "10000"),//时间窗口期 10秒 @HystrixProperty(name = "circuitBreaker.errorThresholdPercentage",value = "60")//失败率达到多少之后跳闸 }) @GetMapping("/admin/findPaymentById/{id}") public CommonResult findPaymentById(@PathVariable("id")Long id){ if(id<0){ throw new RuntimeException("id小于0"); } Payment payment=paymentService.findPaymentById(id); log.info("根据id查找数据"); if(payment!=null){ return new CommonResult(200,"查找数据成功",payment); } return new CommonResult(400,"没有对应的记录"); } //服务熔断调用方法 public CommonResult hystrixRongDuan(@PathVariable("id")Long id){ return new CommonResult(400,"id不能为负数"); }
第二步:当服务调用id<0时会调用hystrixRongDuan方法返回提示,如何多刷几次id<0,在测试id>0,这时会发现得到的数据还是d不能为负数 的提示
多刷新几次就会发现数据又正常了,这就是服务熔断之后再恢复
id传1的时候
再从新刷新几次id=1,恢复正常
必须请求在10次以上circuitBreaker.requestVolumeThreshold",value = "10"),//请求次数
才能触发到熔断,value值可以随意设置
断路器在什么情况下起作用
断路器开启或者关闭的条件
断路器打开之后