如果想忽略某个异常类型,不让这种异常执行降级逻辑,我们可以使用@HystrixCommand注解的ignoreExceptions参数实现
还是使用上节创建的工程来实现本节的功能
1.修改service方法
@Service
public class FallBackService {
@Autowired
private RestTemplate restTemplate;
@HystrixCommand(fallbackMethod = "error")
public String testFallBack(String name) {
//String message = restTemplate.getForObject("http://hello-client/test_fallback?name={1}",String.class,name);
//System.out.println(message);
//让方法抛出ArithmeticException异常
int i = 1/0;
return "hello";
}
public String error(String name, Throwable e) {
System.out.println(name + ": 出错啦出错啦" + e.getMessage());
return "error";
}
}
启动服务注册中、服务提供实例、消费服务实例
访问请求:http://localhost:8000/fallback/test
可以看到所有请求都执行了服务降级逻辑,因为方法抛出了ArithmeticException异常,那么现在我们开始忽略掉ArithmeticException异常,不让ArithmeticException异常执行服务降级
2.修改service,添加@HystrixCommand注解的ignoreExceptions参数,实现忽略
ArithmeticException异常
@Service
public class FallBackService {
@Autowired
private RestTemplate restTemplate;
@HystrixCommand(ignoreExceptions = {ArithmeticException.class}, fallbackMethod = "error")
public String testFallBack(String name) {
//String message = restTemplate.getForObject("http://hello-client/test_fallback?name={1}",String.class,name);
//System.out.println(message);
//抛出ArithmeticException异常
int i = 1/0;
return "hello";
}
public String error(String name) {
System.out.println(name + ": 出错啦出错啦");
return "error";
}
}
再次请求:
image.png
可以看到没有执行服务降级逻辑,忽略掉了ArithmeticException异常。
- 在fallback方法中加入Throwable,获取触发服务降级的具体内容,可以通过获取具体的异常来处理不同的逻辑
public String error(String name, Throwable throwable) {
System.out.println(name + ": 出错啦出错啦" + throwable);
return "error";
}
执行请求:
image.png
网友评论