提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
Feign介绍
一、什么是feign?
feign是springcloud提供的声明式的http客户端,工作在consumer端
feign支持springmvc注解
feign集成了ribbon也支持负载均衡
二、feign原理
1、将feign接口扫描到spring容器:
@EnableFeignClients开启feign注解扫描:FeignClientsRegistrar.registerFeignClients()扫描被@FeignClient标识
的接口生成代理类,并把代理类交给spring容器管理;
2、为接口的方法创建RequestTemplate
当consumer调用feign代理类时,代理类会调用SynchronousMethodHandler.invoke()创建RequestTemplate(url,参数,httpMethod);
3、发出请求
法请求时会通过RequestTemplate创建Request对象,然后client(HttpClient、OkHttp、UrlConnect)使用Request对象发送请求
三、feign接口传出
1、?传参
@RequestParam("id")
2、restful传参
@PathVariable("id")
3、pojo传参
@RequestBody
接口如下
总结
使用步骤
interface工程
在interface工程中导入依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
接口类上添加注解
@FeignClient(“value”) value = provider 服务名称
如
consumer工程
consumer工程
pom依赖导入interface工程
<dependency>
<groupId>com.bjpowernode</groupId>
<artifactId>feign_interface</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
启动类上添加feign注解扫描
@EnableFeignClients //开启feign注解的扫描
使用 @Autowired 注入服务使用
关于feign优化
1、开启feign日志
feign:
client:
config:
default:
# NONE:默认的,不显示任何日志
# BASIC:仅记录请求方法、url、响应状态码以及执行时间
# HEADERS:除了BASIC中定义的信息之外还有请求和响应的头信息;
# FULL:除了HEADERS中定义的信息之外,还有请求和响应的正文以及元数据
loggerLevel: full #开启feign日志
logging:
level:
com.bjpowernode.feign: debug
2、http连接池 导入依赖
<dependency>
<groupId>io.github.openfeign</groupId>
<artifactId>feign-httpclient</artifactId>
</dependency>
3、gzip压缩
server:
compression:
enabled: true #浏览器<------>consumer的gzip压缩
feign:
compression:
request:
enabled: true #consumer<------>provider的gzip压缩
response:
enabled: true
4、feign超时
#方式1
ribbon:
ConnectionTimeout: 5000
ReadTimeout: 5000
#方式2
feign:
client:
config:
feign-provider:
ConnectionTimeout: 5000
ReadTimeout: 5000