在SpringCloud架构体系中,微服务间的通信是基于Feign调用。而在实际使用Feign的过程中我们大概率会面临下面几个问题:
Feign客户端放在消费端还是独立一个api层?
Feign调用的接口如何要不要进行包装?
Feign如何抓取业务生产端的业务异常?
这篇文章我们就来一起探讨一下这几个问题,希望看完能对你有所帮助。
首先我们先看看Feign的调用方式如何抉择?
Feign的调用方式如何选择?
总体来说,Feign的调用方式分为两大类:
在消费端声明Feign客户端
还是需要独立一个公共的API接口层,生产端消费端都需要引入此jar包,同时在消费端按需编写Feign客户端及熔断类。
优化包装
这样丑陋的代码我们当然需要进行优化,优化的目标也很明确:当我们通过Feign调用时,直接获取到实体对象,不需要额外的解装。而前端通过网关直接调用时,返回统一的包装体。
这里我们可以借助ResponseBodyAdvice
来实现,通过对Controller返回体进行增强,如果识别到是Feign的调用就直接返回对象,否则给我们加上统一包装结构。
在feign拦截器中给feign请求添加特定请求头
T_REQUEST_ID
自定义BaseResponseAdvice并实现ResponseBodyAdvice
总结
本文对Feign在使用过程中会遇到的问题做了个小小的总结,也提出了自己可能不太成熟的解决方案。
烧脑?放松一下,听下音乐吧
点击下方