目录
8. http客户端Feign
8.1 feign远程调用
8.2 feign自定义配置
8.3 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模块的依赖
-
测试