zoukankan      html  css  js  c++  java
  • springcloud-Hystrix-降级fallback完善

    在上一篇说了Hystrix的降级使用,但这样会出现两个问题:

      1.代码膨胀。每个方法都得需要有一个降级方法来处理,代码会变得很多。

      2.代码耦合度高。降级方法是写在和添加了@HystricCommd方法同一个类里面,耦合度高

    先解决第一个问题,只要我们定义一个统一的降级方法处理就行了,如下:

      1.书写一个统一的降级方法

        //下面是全局fallback方法
        public String payment_Global_FallbackMethod(){
            return "Global异常处理信息,请稍后再试,o(╥﹏╥)o";
        }

      2.在类上加一个注解,并指定统一降级方法;当出故障的方法没有自己独有的降级方法,就会调用这个统一的降级方法

    @DefaultProperties(defaultFallback = "payment_Global_FallbackMethod")
    public class OrderHysController {

      对了,主启动还是照常得加@EnableCircuitBreaker,以及在配置文件配置开启hystrix

    OK,现在来解决第二个问题代码耦合度高,这种方式是在实际中使用最多的,不过也存在一个缺点,也就是第一个问题了,代码得写比较多,但是能解耦,而且他和上面还不同,他是当@FeignCilent下的接口方法出现故障时,才会调用特定的降级方法,使用如下:

      1.创建一个类,并实现加了@FeignClient的接口

    
    
    @Component
    public class OrderHysServiceImpl implements OrderHysService {
        @Override
        public String paymentInfo_OK(Integer id) {
            return "paymentInfo_OK()。。。。。出错啦";
        }
    
        @Override
        public String paymentInfo_TimeOut(Integer id) {
            return "paymentInfo_TimeOut()。。。。。出错啦";
        }
    }

      2.重写接口的方法,实际上这些方法就是降级方法,但哪个方法出现故障就是调用其实现类方法

      3.指定哪个实现类作为降级类

    @Component
    @FeignClient(value = "cloud-provider-hystrix-payment",fallback = OrderHysServiceImpl.class)
    public interface OrderHysService {

      4.记得加主启动的注解和配置文件开启Hystrix

    feign:
      hystrix:
        enabled: true
    @EnableCircuitBreaker
  • 相关阅读:
    stack的基本使用方式
    洛谷 P2356 弹珠游戏
    关于字符串数组的一些操作
    递归分解因数
    筛法求素数模板
    世界顶级精英们的人生哲学!(转)
    Oracle 中重新编译无效的存储过程, 或函数、触发器等对象(转)
    由于没有安装音量控制程序,WINDOWS无法在任务栏上显示音量控制(转)
    Maximo(转)
    oracle 中nvl和sql server中isnull功能一样的
  • 原文地址:https://www.cnblogs.com/ibcdwx/p/14438425.html
Copyright © 2011-2022 走看看