Hystrix全局降级方法

2021-08-30  本文已影响0人  CodeYang

三、每个方法都需要配置一个降级方法,导致代码膨胀。我们拿服务消费者为例,进行统一配置。

  1. 修改 Controller 代码,定义全局异常处理方法

@DefaultProperties(defaultFallback = "consumerGlobalHandler") //没有配置异常方法的调用这个,配置的调用自己的
consumerTimeOut 异常处理会调用 consumerException
consumerException 异常处理会调用 consumerGlobalHandler

@RestController
@DefaultProperties(defaultFallback = "consumerGlobalHandler") //没有配置异常方法的调用这个,配置的调用自己的
public class CHystrixController {

    @Resource
    private OpenFeginService service;

    @GetMapping(value = "/consumer/hystrix/ok/{name}")
    public String consumerOk(@PathVariable("name")String name){
        return service.providerOK(name)+" And Consumer[OK]";
    }

    @GetMapping(value = "/consumer/hystrix/timeout/{name}")
    @HystrixCommand(fallbackMethod = "consumerTimeOutHandler",commandProperties = {
            //规定三秒以内的逻辑为正常逻辑
            @HystrixProperty(name = "execution.isolation.thread.timeoutInMilliseconds",value = "1500")
    })
    public String consumerTimeOut(@PathVariable("name")String name){
        return service.providerTimeOut(name)+" And Consumer[TimeOut]";
    }

    /**
     * fallback 方法  当方法出现异常时调用该方法
     * @param name
     * @return
     */
    public String consumerTimeOutHandler(@PathVariable("name") String name){
        return name+" Print From consumerTimeOutHandler  系统繁忙,请稍后再试!";
    }


    @GetMapping(value = "/consumer/hystrix/exception/{name}")
    @HystrixCommand //没有特别指明用哪个方法,就用统一的
    public String consumerException(@PathVariable("name")String name){
        int a=10/0;
        return service.providerTimeOut(name)+" And Consumer[TimeOut]";
    }


    /**
     * fallback 方法  当方法出现异常时调用该方法
     * @return
     */
    public String consumerGlobalHandler(){
        return " GlobalHandler异常信息处理  系统繁忙,请稍后再试!";
    }
}

  1. 测试


    consumerTimeOut异常处理.png
consumerException异常处理.png
上一篇 下一篇

猜你喜欢

热点阅读