继承RequestInterceptor,实现feign调用前参数配置,为何会被所有项目下请求调用?
本篇会分以下几个模块进行梳理,如有需要可以直接进行跳转
- Feign调用原理
- 重要组件的主要作用
- Feign的简单使用
- Feign调用前的参数设置
(1)header存值大小限制
(2)多线程情况下的上下文丢失 - 配置为何会被所有项目下请求调用
一、Feign调用原理
SpringCloud 中 Feign 是目前跨服务调用应用中使用最多的技术。
在微服务启动时,Feign会进行包扫描,对加@FeignClient注解的接口,按照注解的规则,创建远程接口的本地JDK Proxy代理实例。然后,将这些本地Proxy代理实例,注入到Spring IOC容器中。当远程接口的方法被调用,由Proxy代理实例去完成真正的远程访问,并且返回结果。
执行图例:
二、重要组件的主要作用
组件名称 | 作用领域 |
---|---|
JDK Proxy | 不属于Feign组件 内置代理 |
FeignInvocationHandler | 实现了InvocationHandler,Feign专属处理器,反射用来寻找MethodHandler |
SynchronousMethodHandler | 实现了MethodHandler,进行请求重封装,并接收返回值 |
1、创建requestTemplate 2、client.excecute()正式调用 3、response接收 | |
Client | 最终进行请求封装的组件 |
LoadBalancerFeignClient负载均衡客户端选择调用Default进行请求 |
执行顺序图示:
Cilent的四种实现方式,注意上表中Client调用方式
名称 | 来源 |
---|---|
Default | feign.Client |
ApacheHttpClient | Apache httpclient |
OkHttpClient | OkHttp3 |
LoadBalancerFeignClient | Ribben |
三、Feign的简单使用
一、创建一个接口服务,用来专属调用统一url的另一个服务
二、创建方法,设置调用参数与url
三、补充请求方式、请求参数、请求地址
@FeignClient(name = "feignTest", url = "${otherService.url}", configuration = FeignConfiguration.class)