1. Feign的默认配置

  Feign 的默认配置 Spring Cloud Netflix 提供的默认实现类:FeignClientsConfiguration 

  解码器:Decoder feignDecoder: ResponseEntityDecoder (which wraps a SpringDecoder) 

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。

  编码器:Encoder feignEncoder: SpringEncoder 

  日志框架:Logger feignLogger: Slf4jLogger
  契约:Contract feignContract: SpringMvcContract
  生成器:Feign.Builder feignBuilder: HystrixFeign.Builder
  说明: 

  解码器的作用:将 HTTP 响应数据反序列化为 Java 对象 
  编码器的作用:将方法签名中方法参数对象序列化为请求参数放到 HTTP 请求中

2. 自定义配置

  

 
import org.springframework.context.annotation.Bean; import feign.Contract; import feign.Logger; //@Configuration public class RcFeignConfiguration { @Bean public Logger.Level feignLoggerLevel() { return feign.Logger.Level.FULL; } /*@Bean public Contract feignContract() { return new feign.Contract.Default(); }*/ }
 

配置@ FeignClient注解

  @FeignClient(value = "spring-cloud-provider", configuration = RcFeignConfiguration.class)

  说明:若配置文件被 SpringContext 扫描,则会被@ FeignClien 共用,会覆盖。

3. 日志配置

# 日志配置,默认是不打印任何的日志 
logging.level.com.drunck.education.feign.IUserBiz=debug

需要在配置类里面添加以下代码:

@Bean
    public Logger.Level feignLoggerLevel() { return feign.Logger.Level.FULL; }

  说明:四种级别 
  NONE:默认,不打印任何日志 
  BASIC:打印请求方法和 URL,和请求返回状态码和执行时间。 
  HEADERS:打印请求和返回的头部信息。 
  FULL:打印以上的全部信息。

4. 契约配置

  在配置类里面添加以下代码

@Bean 
public Contract feignContract() { return new feign.Contract.Default(); }

  修改 IuserBiz 类

@RequestLine("GET /api/user/{id}") 
String view1(@Param(value = "id") int id); 

5. 支持压缩

 
# 开启压缩 
feign.compression.request.enabled=true feign.compression.response.enabled=true # 更多配置 feign.compression.request.mime-types=text/xml,application/xml,application/json feign.compression.request.min-request-size=2048 
 

6. URL属性

  

 
import org.springframework.cloud.netflix.feign.FeignClient; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; /** * @author */ @FeignClient(value = "baidu", url = "www.baidu.com") public interface IdrunckBiz { @RequestMapping(value = "/{url}", method = RequestMethod.GET) String get(@PathVariable(name = "url") String url); } 
 

  说明:定义了 url 之后,vaule 为必选值,这时的 value 只是一个标识。

7. 支持继承

  1、定义一个普通接口

 
public interface UserService { @RequestMapping(method = RequestMethod.GET, value = "/api/user/find/{id}") User find(@PathVariable(value = "id") int id); } 
 

  2 、实现接口

 
import java.util.Date; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RestController; /** * @author*/ @RestController public class FeignApiUserController implements UserService { protected final Logger logger = LoggerFactory.getLogger(this.getClass()); @Override public User find(@PathVariable int id) { User user = new User(); user.setId(id); user.setName("张三"); user.setCreateTime(new Date()); logger.info("请求接口返回:{}", user); return user; } } 
 

  说明:springmvc 里面不支持方法参数映射的继承 

  3、继承

  

public interface IUserBiz extends UserService{ // … } 

 

原文 SpringCloud学习笔记(10)----Spring Cloud Netflix之声明式 REST客户端 -Feign的高级特性

扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄