使用Spring Cloud Fegin + Hystrix的failed and fallback failed问题解决

背景

服务使用Spring Cloud Fegin + Hystrix 来使用RPC调用
Spring Cloud 版本:2.1.3.RELEASE

报错信息如下:


AccDingtalkClient#getDingtalkAuthAccessToken(String) failed and fallback failed

这个日志只能看出失败并且降级也失败了,但是具体怎么失败了也没有说明,所以只能本地断点看下到底是什么错误

过程

我们知道Hystrix最主要的抽象类是HystrixCommand;
Fegin-Hystrix的HystrixInvocationHandler.invoke则是主要用于FeginClient降级的代码块(对于其他源码实现感兴趣的人可以去查哈,我这儿只是讲调试看到的主要地方),所以我在这个代码块中打断点(调试的时候还去HystrixCommand打了断点,但是一直没有找到真正的原因):


image.png

很容易看出,实际错误是没有权限,这是第一个问题,那为什么fallback会失败呢,继续断点


image.png

fallbackFactory没有值,我看了Client定义是有值的,所以我又重新启动一遍,断点打在fallbackFactory赋值的地方


image.png

还是为空,看了其他的client,都不是空的,然后再去看FeginClient的定义
image.png

所以是Fallback定义写混了,fallback的方法也没有找到,导致failback failed

后记

原因很简单,只是想记录下解决问题的方式,也许对你解决问题有帮助

你可能感兴趣的:(使用Spring Cloud Fegin + Hystrix的failed and fallback failed问题解决)