第十五节--Hystrix之服务降级

1 .先从8001自身找问题:设置自身调用超时时间的峰值,峰值内可以正常运行,超时了需要有兜底的方法处理,作服务降级fallback
    在服务端cloud-provider-hystrix-payment8001工程中设置超时,消费者去调用
   第一步:
 /**
      * 让线程睡眠5秒再执行方法,超时就去执行timeoutHandler方法返回 , @HystrixProperty设置该方法在3秒内执行
      * 目的让方法执行延迟去执行timeoutHandler方法
     */
     @HystrixCommand(fallbackMethod ="timeoutHandler",commandProperties = {
     @HystrixProperty(name = "execution.isolation.thread.timeoutInMilliseconds",value = "3000")
     })
      @GetMapping("/admin/findPaymentList")
     public CommonResult findPaymentList(){
     try {
     Thread.sleep(5000);
     }catch (Exception e){

     }
     List<Payment> paymentList = paymentService.findPaymentList();
     log.info("查询所有数据");
     if(paymentList!=null){
     return new CommonResult(200,"查找数据成功",paymentList);
     }
     return new CommonResult(400,"没有对应的记录");
    }
//超时需要执行的方法
public CommonResult timeoutHandler(){
return new CommonResult(400,"服务正忙,请稍后再试");
}
第二步:主启动加上@EnableCircuitBreaker //激活hystrix
 
第三步:测试,启动服务端8001,消费端cloud-consumer-feign-hystrix-order80,调用findPaymentList()方法
       消费端通过接口OpenFeign调用,查看执行返回我们所设置超时的方法
 
 
 
异常同理
 

 
80订单消费端,可以更好的保护自己,依样进行客户端降级保护 cloud-consumer-feign-hystrix-order80工程
第一步:在yml文件中配置
#启用hystrix
feign:
  hystrix:
    enabled: true
第二步:在主启动类上加注解@EnableHystrix
 
第三步:controller代码
/**
* 1.5秒内如果返回则OK,否则执行timeoutHandler方法返回友好提示
* @return
*/
@HystrixCommand(fallbackMethod ="timeoutHandler",commandProperties = {
@HystrixProperty(name = "execution.isolation.thread.timeoutInMilliseconds",value = "1500")
})
@GetMapping("/consumer/findPaymentList")
public CommonResult findPaymentList(){
log.info("查询所有数据");
return orderService.findPaymentList();
}
//超时需要执行的方法
public CommonResult timeoutHandler(){
return new CommonResult(400,"消费端服务正忙,请稍后再试");
}
第四步:测试
原文地址:https://www.cnblogs.com/hexublog/p/13681870.html