目录
[8. http客户端Feign](#8. http客户端Feign)
[8.1 feign远程调用](#8.1 feign远程调用)
[8.2 feign自定义配置](#8.2 feign自定义配置)
[8.3 feign性能优化](#8.3 feign性能优化)
[8.4 feign最佳实践](#8.4 feign最佳实践)
8. http客户端Feign
8.1 feign远程调用
RestTemplate存在的问题 :
-
代码可读性差
-
参数复杂URL难以维护
Feign是声明式的http客户端
使用步骤 :
- 引入依赖
<!--Feign客户端依赖-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
- 开启自动装配 在启动类上添加注解
@EnableFeignClients
- 创建接口声明
@FeignClient("userservice")
public interface UserClient {
@GetMapping("/user/{id}")
User findById(@PathVariable Long id);
}
- order- controller中替换原来发请求的代码
@Autowired
private OrderMapper orderMapper;
// 注入feign接口
@Autowired
private UserClient userClient;
@GetMapping("{orderId}")
public Order queryOrderByUserId(@PathVariable("orderId") Long orderId) {
Order order = orderMapper.findById(orderId);
User user = userClient.findById(order.getUserId());
order.setUser(user);
return order;
}
8.2 feign自定义配置
修改日志级别 :
- 配置文件方式 :
全局生效 :
feign:
client:
config:
default: # default就是全局配置 如果写服务名称就是针对某个微服务的配置
loggerLevel: FULL # 日志级别
只针对某个微服务生效
feign:
client:
config:
userservice: # 只对userservice生效
loggerLevel: FULL # 日志级别
- 代码配置
8.3 feign性能优化
主要包括 :
-
使用连接池代替默认的URLCollection
-
日志级别,最好用basic或none
连接池配置 ;
引入依赖 :
<!--httpClient的依赖-->
<dependency>
<groupId>io.github.openfeign</groupId>
<artifactId>feign-httpclient</artifactId>
</dependency>
配置连接池 :
feign:
client:
config:
default: # default就是全局配置 如果写服务名称就是针对某个微服务的配置
loggerLevel: BASIC # 日志级别
httpclient:
enable: true # 支持HTTPClient的开关
max-connection: 200 # 最大连接数
max-connections-per-route: 50 # 单个路径的最大连接数
8.4 feign最佳实践
方式一 :
方式二 :
方式二的实现 :
-
新建feign-api模块 引入feign的stater的依赖
-
把order-service的 UserClient User实体类 FeignConfiguration配置类
-
复制到feign-api模块中
-
在order-service中引入feign-api模块的依赖
-
测试