如何优雅地处理微服务间调用的异常
现在微服务架构盛行,其中spring cloud方案就很具有代表。
那么在微服务之间进行调用,如果被调用的服务挂了,调用方如何感知呢?
一、加上hystrix熔断
在定义feignClient的地方指定熔断,如下图
当被调用服务不可用或者被调用方发生错误的时候,会触发熔断,但是,如果被调用方抛出异常,调用方怎么知道究竟是出了什么问题呢?
那,这就出现了
二、feign全局异常处理
我们不得不提到feign提供的一个接口叫做ErrorDecoder, 是用来处理feign异常的,有一个方法需要实现
public Exception decode(String s, Response response)
如下图:
这样就会替换它默认的feign异常处理,这样就可以捕捉全局的异常了,但是又带来一个新的问题,如果使用这个ErrorDecoder,得关闭熔断,否者这里抛出的FeignBadReq