目录
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中替换原来发请求的代码
@Autowiredprivate OrderMapper orderMapper;// 注入feign接口@Autowiredprivate 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模块的依赖
-
测试