第十七节--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值可以随意设置
 
断路器在什么情况下起作用
 
断路器开启或者关闭的条件
 
断路器打开之后
 
 
 
 
 
 
 
 
 
 
 
posted @ 2020-09-16 22:36  hexu_blog  阅读(173)  评论(0编辑  收藏  举报