导言
Feign是一款java的Restful客户端组件,Feign使得 Java HTTP 客户端编写更方便。Feign 灵感来源于Retrofit, JAXRS-2.0和WebSocket。在之前的文章里面,有讲到java实现远程调用的几种技术,本章要讲的就是使用Feign来实现Spring cloud 的远程调用,在这之前可能需要先了解下spring cloud的服务注册,有了服务注册就可以通过Feign来实现远程调用了。
使用方法
直接就是用注解定义一个 FeignClient接口,然后调用那个接口就可以了。人家Feign Client会在底层根据你的注解,跟你指定的服务建立连接、构造请求、发起靕求、获取响应、解析响应,等等
实现原理
常用注解
Feign 默认创建了一些基于约定的注解接口
注解名称|目标接口|使用方法@RequestLine
| Method |用于给请求设定HttpMethod
和UriTemplate
使用相应的@Param注释参数解析用大括号{expression}包装的表达式,值@Param
Parameter| 定义模板变量,其值将用于按名称解析相应的模板表达式。@Headers
|Method, Type|定义HeaderTemplate; UriTemplate的变种。 使用@Param注释值来解析相应的表达式。 在Type上使用时,模板将应用于每个请求。 在Method上使用时,模板仅适用于带注释的方法。@QueryMap
| Parameter| 定义名称 - 值对的映射或POJO,去映射到查询url中@HeaderMap
| Parameter| 定义名称 - 值对的映射或POJO,去映射到查询请求头中@Body
| Method| 定义一个模板,类似于UriTemplate和HeaderTemplate,它使用@Param带注释的值来解析相应的表达式。
类图结构
三层分别为:
•代理层 动态代理调用层
•转换层 方法转http请求,解码http响应
•网络层 http请求发送