目录
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模块的依赖 
-  测试  
