theme: smartblue
持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第11天,点击查看活动详情
写在前面
Feign是微服务中服务间调用的优选组件,后来的OpenFeign也是基于此来开展的。
我会创建一个新的专栏,来保存我最近使用Feign的一些心得和问题点,欢迎大家关注。
为什么要打印出Feign的报错信息
总是会碰到Feign调不通的时候,这种问题的出现简直是五花八门。
有可能是路径错误!
有可能是服务连接不上!
有可能是Nacos命名空间和他人一致,发送到他人服务上去了!
总之千奇百怪,而目前项目框架中,还总是只使用fallback来实现Feign接口,这就导致了我明明知道出问题了,但是出的什么问题却不知道。
所以,不得不将Feign的报错信息全部打印出来。
解决方案
Feign提供了FallBackFactory工厂类,只需要实现这个工厂类,就能捕获到feign接口的全部异常。
首先在Feign接口中进行调整,调整完后如下:
java @FeignClient(value = 'other', fallbackFactory = FileFallbackFactory.class) public interface FileFeign { }
在@FeignClient注解中声明fallbackFactory即可。
接下来实现FileFallbackFactory类。
``` @Slf4j @Component public class FileFallbackFactory implements FallbackFactory {
@Override
public FileFallback create(Throwable throwable) {
log.error(throwable.getMessage());
throwable.printStackTrace();
return new FileFallback();
}
}
@Slf4j class FileFallback implements FileFeign {
} ```
通过实现FallBackFactory工厂类中create方法,即可捕获所有经过Feign接口的异常,而且也可以兼容fallback类。
只需要再从当前文件中声明一个子类即可。
期间我遇到了哪些问题?
关于Feign是使用Fallback比较好,还是使用FallbackFactory比较好,这是困扰我的一个问题。
这其中就是是否捕获异常的区别。
想了很久,我大概是这样做的。
正式上线的情况,可以采用Fallback,毕竟只是处理异常,不是抛出异常。
测试环境,还是尽量是FallbackFactory,报错全一些,代码编写时也能轻松一些。
总结
在编写代码的过程中,没办法获取到所有的错误简直就是灾难,不能和代码有信息差。