SpringCloud05_Hystrix的概述、案例详解、服务降级、服务熔断、服务监控hystrixDashboard(五)

简介: ⑤. 服务降级(cloud-provider-hystrix-payment8001)⑥. 服务降级(cloud-consumer-feign-hystrix-order80)

⑤. 服务降级(cloud-provider-hystrix-payment8001)


  • ①. 在主启动类上添加注解:@EnableCircuitBreaker(开启服务降级)


  • ②. 在service中添加服务降级的方法
    (我们设置了3s之内是正常的,如果超过了3s就有兜底的方法)


  @HystrixCommand(fallbackMethod = "paymentInfo_TimeOutHandler",commandProperties = {
            @HystrixProperty(name="execution.isolation.thread.timeoutInMilliseconds",value="5000")
    })
    public String paymentInfo_TimeOut(Integer id){
        int timeNumber =3 ;
        //int age=10/0;
        try { TimeUnit.SECONDS.sleep(timeNumber); }catch (Exception e) {e.printStackTrace();}
        return "线程池:"+Thread.currentThread().getName()+"   paymentInfo_TimeOut,id:  "+id+"\t"+"呜呜呜"+" 耗时(秒)"+timeNumber;
    }
    public String paymentInfo_TimeOutHandler(Integer id){
        return "线程池:"+Thread.currentThread().getName()+"   paymentInfo_TimeOutHandler,id:  "+id+"\t"+"O(∩_∩)O"  ;
    }


③. 一旦调用服务方法失败并抛出了错误信息后,会自动调用@HystrixCommand标注好的fallbackMethod调用类中的指定方法


微信图片_20220108172512.png


⑥. 服务降级(cloud-consumer-feign-hystrix-order80)


  • ①. 80订单微服务,也可以更好的保护自己,自己也依样画葫芦进行客户端降级保护
    (我们自己配置过的热部署方式对java代码的改动明显,但对@HystrixCommand内属性的修改建议重启微服务)


  • ②. yaml


feign:
  hystrix:
    enabled: true #如果处理自身的容错就开启。开启方式与生产端不一样。


  • ③. 主启动类上添加 @EnableHystrix


  • ④. 在controller中添加如下方法进行兜底处理


 @GetMapping("/consumer/hystrix/timeout/{id}")
 @HystrixCommand(fallbackMethod = "paymentTimeOutFallbackMethod",commandProperties = {
         @HystrixProperty(name="execution.isolation.thread.timeoutInMilliseconds",value="1500")
 })
 //@HystrixCommand
 //这里设置的时间是1.5s,就是说调用服务会等待1.5s,如果超过了就会走fallbackMethod方法
 //而我们在支付的微服务中,时间是3s
 public String paymentInfo_TimeOut(@PathVariable("id") Integer id) {
     return paymentHystrixService.paymentInfo_TimeOut(id);
 }
 public String paymentTimeOutFallbackMethod(@PathVariable Integer id) {
     return "我是消费者80,对方支付系统繁忙请10分钟后再试或者自己运行出错请检查自己!";
 }


⑤. 我们在8001端进行了3s的延迟处理,这里80端去调用8001端的时候,如果超过了1.5s就会走兜底的方法


微信图片_20220108172609.png


⑦. 目前的问题

每个业务方法对应一个兜底的方法,代码膨胀

统一和自定义的分开


⑧. 解决办法在controller类中添加上@DefaultProperties(defaultFallback=" “)

每个方法配置一个服务降级方法,技术上可以,实际上不合理

除了个别重要核心业务有专属,其他普通的可以通过@DefaultProperties(defaultFallback=”")统一跳转



微信图片_20220108172624.png


@RestController
@Slf4j
@DefaultProperties(defaultFallback = "payment_Global_FallbackMethod")
public class OrderHystrixController {
    @Resource
    private PaymentHystrixService paymentHystrixService;
    /*1>.OK*/
    @GetMapping("/consumer/hystrix/ok/{id}")
    public String paymentInfo_OK(@PathVariable("id") Integer id) {
        return paymentHystrixService.paymentInfo_OK(id);
    }
    /*2>.timeOut*/
    @GetMapping("/consumer/hystrix/timeout/{id}")
//    @HystrixCommand(fallbackMethod = "paymentTimeOutFallbackMethod",commandProperties = {
//            @HystrixProperty(name="execution.isolation.thread.timeoutInMilliseconds",value="1500")
//    })
    @HystrixCommand //
    //这里设置的时间是1.5s,就是说调用服务会等待1.5s,如果超过了就会走fallbackMethod方法
    //而我们在支付的微服务中,时间是3s
    public String paymentInfo_TimeOut(@PathVariable("id") Integer id) {
        return paymentHystrixService.paymentInfo_TimeOut(id);
    }
    public String paymentTimeOutFallbackMethod(@PathVariable Integer id) {
        return "我是消费者80,对方支付系统繁忙请10分钟后再试或者自己运行出错请检查自己!";
    }
    //globol fallback
    //下面是全局fallback方法
    public String payment_Global_FallbackMethod() {
        return "Global异常处理信息,请稍后再试!!";
    }
}


微信图片_20220108172702.png



相关文章
|
6天前
服务熔断器-Hystrix
服务熔断器-Hystrix
25 2
|
6天前
|
SpringCloudAlibaba Dubbo Java
SpringCloud Alibaba集成Dubbo实现远程服务间调用
SpringCloud Alibaba集成Dubbo实现远程服务间调用
|
6天前
SpringCloud服务已经关但是Eureka还是显示up
SpringCloud服务已经关但是Eureka还是显示up
27 0
|
6天前
|
存储 SpringCloudAlibaba Java
【微服务 SpringCloud】实用篇 · 服务拆分和远程调用
【微服务 SpringCloud】实用篇 · 服务拆分和远程调用
21 2
|
6天前
|
SpringCloudAlibaba Java 网络架构
【Springcloud Alibaba微服务分布式架构 | Spring Cloud】之学习笔记(七)Spring Cloud Gateway服务网关
【Springcloud Alibaba微服务分布式架构 | Spring Cloud】之学习笔记(七)Spring Cloud Gateway服务网关
129 0
|
6天前
|
Java 数据安全/隐私保护 Sentinel
微服务学习 | Spring Cloud 中使用 Sentinel 实现服务限流
微服务学习 | Spring Cloud 中使用 Sentinel 实现服务限流
|
6天前
|
消息中间件 SpringCloudAlibaba Java
【Springcloud Alibaba微服务分布式架构 | Spring Cloud】之学习笔记(八)Config服务配置+bus消息总线+stream消息驱动+Sleuth链路追踪
【Springcloud Alibaba微服务分布式架构 | Spring Cloud】之学习笔记(八)Config服务配置+bus消息总线+stream消息驱动+Sleuth链路追踪
797 0
|
6天前
|
SpringCloudAlibaba 负载均衡 Java
【Springcloud Alibaba微服务分布式架构 | Spring Cloud】之学习笔记(三)Eureka服务注册中心
【Springcloud Alibaba微服务分布式架构 | Spring Cloud】之学习笔记(三)Eureka服务注册中心
54 1
|
6天前
|
监控 微服务
Hystrix熔断器设计思想(学习笔记)附(服务监控hystrixDashboard识图)
Hystrix熔断器设计思想(学习笔记)附(服务监控hystrixDashboard识图)
24 0
|
6天前
|
存储 负载均衡 Java
【Spring底层原理高级进阶】微服务 Spring Cloud 的注册发现机制:Eureka 的架构设计、服务注册与发现的实现原理,深入掌握 Ribbon 和 Feign 的用法 ️
【Spring底层原理高级进阶】微服务 Spring Cloud 的注册发现机制:Eureka 的架构设计、服务注册与发现的实现原理,深入掌握 Ribbon 和 Feign 的用法 ️