RestTemplate方式调用存在的问题 1 2 3 4 String url = "http://userservice/user/"  + order.getUserId(); User user = restTemplate.getForObject(url, User.class ) ; 
代码可读性差,编程体验不统一 
参数复杂URL难以维护 
 
Feign是什么? Feign是一个声明式的http客户端,其作用就是帮助我们优雅的实现http请求的发送
https://github.com/OpenFeign/feign 
定义和使用Feign客户端 
1 2 3 4 <dependency >     <groupId > org.springframework.cloud</groupId >      <artifactId > spring-cloud-starter-openfeign</artifactId >  </dependency > 
启动类添加@EnableFeignClients注解 
实现client接口 
 
1 2 3 4 5 6 @FeignClient ("userservice" )public  interface  UserClient      @GetMapping ("/user/{id}" )     User findById (@PathVariable("id" )  Long id) ; } 
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 @Service public  class  OrderService      @Autowired      private  OrderMapper orderMapper;     @Autowired      private  UserClient userClient;     public  Order queryOrderById (Long orderId)                    Order order = orderMapper.findById(orderId);                  User user = userClient.findById(order.getUserId());                  order.setUser(user);                  return  order;     } } 
自定义Feign配置 Feign运行自定义配置来覆盖默认配置,可以修改的配置如下
类型 
作用 
说明 
 
 
feign.Logger.Level 
修改日志级别 
四种级别:NONE,BASIC,HEADERS,FULL 
 
feign.codec.Decoder 
响应结果的解析器 
http远程调用的结果做解析 
 
feign.codec.Encoder 
请求参数编码 
将请求参数编码,便于通过http请求发送 
 
feign.Contract 
支持的注解格式 
默认是SpringMVC的注解 
 
feign.Retryer 
失败重试机制 
请求失败的重试机制,默认没有,会使用Ribbon的 
 
 
 
一般需要配置的是日志级别
Feign日志配置 
配置文件方式
1 2 3 4 feign:   client:      default:         loggerLevel:  FULL   
1 2 3 4 feign:   client:      userservice:  服务名称        loggerLevel:  FULL   
Java代码方式,需要声明Bean
 
1 2 3 4 5 6 public  class  FeignClientConfiguration      @Bean      public  Logger.Level.feignLogLevel() {         return  Logger.Level.BASIC;     } } 
全局配置,放在@EnableFeignClients注解中 
 
1 @EnableFeignClients (defaultConfiguration = FeignClientConfiguration.class ) 
1 @FeignClient (value = "userservice" , configuration = FeignClientConfiguration.class )