三、每个方法都需要配置一个降级方法,导致代码膨胀。我们拿服务消费者为例,进行统一配置。
- 修改 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异常信息处理 系统繁忙,请稍后再试!";
}
}
-
测试
consumerTimeOut异常处理.png
网友评论