Feign是springcloud中远程调用的一种形式,其实底层也就是http的形式调用的,要想利用Feign写一个拦截器,可以做一些特殊的处理,比如可以想nginx一样,指定访问的路径服务的转发,也可以做一些请求头等一些处理。
也就是说假设现在你的微服务集群有 A,B 两个服务,那么你可以在 A 服务中定义一个接口,通过 OpenFeign 的相关注解,它能够帮你实现调用 A 的接口方法会自动调用远程的 B 服务暴露的 Rest 接口,使得 A 调用远程服务 B 的接口就像在调用本地方法一样。
至少在java界,要是说你还没有使用过微服务架构,都会觉得自己out了。Feign,是Spring Cloud Netiflix组件中的一个轻量级Restful的HTTP服务客户端,实现了webservice面向接口编程,进一步降低了项目的耦合度。
在 注 入 BeanDefinition 之 后 , 通 过 JDK 动 态 代 理 机 制 生 成FeignClient代理对象,使用FeignClient接口里面的方法时,方法会被拦截,源码在ReflectiveFeign类中,如下所示:
随着 Spring Cloud 的流行性,Feign 已经成为 RPC 的事实标准,由于其构建与 Http 协议之上,对请求和返回值缺少规范约束,在日常开发过程中经常由于设计不当对系统造成一定的侵入性。