1 为什么使用Feign
Feign 用来代替RestTemplate
RestTemplate方式调用的问题
- 不了解RestTemplate的 不知道怎么使用
- 当请求参数多的时候 不太适用
2 使用Feign
- 导入依赖
<!-- feign 依赖-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
- 开启Feign
3. 写调用接口类
- Controller调用
小总结
3 自定义Feign配置
一般情况下,默认值就能满足我们使用,如果要自定义时,只需要创建自定义的@Bean覆盖默认Bean即可
3.1 配置文件方式
-
NONE:不记录任何日志信息,这是默认值。
-
BASIC:仅记录请求的方法,URL以及响应状态码和执行时间
-
HEADERS:在BASIC的基础上,额外记录了请求和响应的头信息
-
FULL:记录所有请求和响应的明细,包括头信息、请求体、元数据。
feign:
client:
config:
userservice: # 针对某个微服务的配置 当调用adminservice时候 就不生效
loggerLevel: FULL # 日志级别
# default: # 这里用default就是全局配置,如果是写服务名称,则是针对某个微服务的配置
# loggerLevel: FULL # 日志级别
3.2 配置类方式
全局生效
某服务生效
小总结
4 性能优化
引入依赖httpClient连接池
<!-- feign httpclient连接池-->
<dependency>
<groupId>io.github.openfeign</groupId>
<artifactId>feign-httpclient</artifactId>
</dependency>
配置连接池
httpclient:
enabled: true # 开启feign对HttpClient的支持
max-connections: 200 # 最大的连接数
max-connections-per-route: 50 # 每个路径的最大连接数
4.1 代码优化
方案1
在springmvc中 接口中的参数 和@pathVariable参数也继承不了,不起作用
方案2
总结
5 实现方案2
实现流程
- 创建module,引入feign依赖
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
</dependencies>
- 拷贝代码
- 在order-service中引入公共feign依赖
- 启动
报错了 因为扫描不到boot启动类之外的包 所以注入不了userClient
解决方案 选2
总结