Feign显示fallback异常原因
我在最一开始使用Feign的时候,是使用FallBack类去实现的FeignClient接口,就像这样
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| @FeignClient(name = "SPRINGCLOUD2-PROVIDER",contextId = "DeptClient", fallback = DeptClient.DeptClientFallBack.class) public interface DeptClient {
@GetMapping(value = "/dept/get/{id}") CommonResult<Dept> get(@PathVariable("id") long id);
@GetMapping("/timeout") String timeout(); @Component class DeptClientFallBack implements DeptClient{
@Override public CommonResult<Dept> get(long id) { return null; }
@Override public String timeout() { return null; } } }
|
但是这样的话,我发现没有办法查看是因为什么原因造成的fallback呢,这种方法肯定是不行的
然后发现@FeignClient注解中有一个属性是fallbackFactory,看着这个是有一个Throwable参数的,拿来试一试
1
| T create(Throwable cause);
|
说干就干
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
| @FeignClient(name = "SPRINGCLOUD2-PROVIDER",contextId = "DeptClient", fallbackFactory = DeptClientFallBackFactory.class) public interface DeptClient {
@GetMapping(value = "/dept/get/{id}") CommonResult<Dept> get(@PathVariable("id") long id);
@GetMapping("/timeout") String timeout(); }
@Component public class DeptClientFallBackFactory implements FallbackFactory<DeptClient> {
@Override public DeptClient create(Throwable throwable) { return new DeptClient() { @Override public CommonResult<Dept> get(long id) { System.out.println("fallback 原因:"+throwable.getMessage()); CommonResult<Dept> result = new CommonResult<>(); result.isOk(); return result; }
@Override public String timeout() { return null; } }; } }
|
可以拿到异常信息了