基于spring cloud 体系的微服务,服务间调用默认使用 openFeign 进行调用,但是由于源码本身的问题。针对于在调用时出现的各类信息,并没有分门别类的错误描述。当业务需要针对不同的错误进行处理时,就不能简单的通过FeignException来进行区分。笔者通过整理服务间调用时的各类异常堆栈及列表。分别列出相应的错误列表及触发时堆栈,以方便后续分别进行业务判断和处理
本应用基于ribbon进行服务查找,使用spring-cloud open-feign, 没有使用retry机制, 底层使用feign-okhttp, 因此,如果有异常与下列堆栈不一致时,请检查是否一致.
版本: openFeign: 9.7.0, netflix ribbon: 2.2.5, okhttp3: 3.8.1
总共的异常列表如下所示
- 无服务时异常
- 有服务但连接失败
- 调用中网络错误读取数据超时
- 响应4xx错误码
- 响应5xx错误码
- 解析结果错误(json反序列化失败)
- 解析结果错误(无converter)
所有的异常触发类均由类 SynchronousMethodHandler 触发,但作用行不一样.
以下异常栈从原始cause,依次往下。如 cause1为 root cause, 最下层为业务层接收到的异常