SpringCloud>06 - Feign 的配置

扯淡:

上一章】简单介绍了Feign的基本使用,其配置都是Feign的默认配置,本节将介绍如何自定义 Feign 的配置。包含 java 配置和 properties 配置。参考官网。

springboot、springcloud、docker学习目录:【传送门】 

官网:

springcloud openfeign:

https://spring.io/projects/spring-cloud-openfeign

feign github:

https://github.com/OpenFeign/feign

Feign 的配置:

1、默认配置:

包含译码器、编码器、日志框架契约等。Contract 使用的是SpringMVC的契约,所以我们可以在feign的客户端中使用SpringMVC的注解。

2、其他配置:

Netiflix 默认是没有为Feign提供这些配置,但是在创建Feign客户端的时候仍然会从应用的上下文中寻找这些配置。

自定义配置—Java配置:

1、新建springcloud_user_feign_configuration_java模块:

复制 springcloud_user_feign 改名、父子pom、导入项目。

2、创建配置类:

/**
 * @Auther: xf
 * @Date: 2018/12/23 19:28
 * @Description: Feign 的配置
 */
@Configuration
public class MyFeignConfiguration {
    /**
     * 契约   不配置则 使用 spring mvc 的契约
     */
    @Bean
    public Contract feignContract() {
        return new feign.Contract.Default();
    }
    /**
     * Feign 日志
     * 级别:NONE BASIC HEADERS FULL
     */
    @Bean
    public Logger.Level feignLoggerLevel() {
        return Logger.Level.FULL;
    }
    @Bean
    public BasicAuthRequestInterceptor basicAuthRequestInterceptor() {
        return new BasicAuthRequestInterceptor("user", "password");
    }
}

注意:配置类需要放到工程现有可以扫描到的包之外,与Ribbon的java配置相同。

3、Feign 客户端引入配置类:

​/**
 * @Auther: xf
 * @Date: 2018/12/23 10:58
 * @Description:  文章微服务接口
 * FeignClient:指定从哪个服务中调用 api 服务名称不可以包含下划线
 */
@FeignClient(name = "springcloud-article", configuration = MyFeignConfiguration.class )
public interface FeignArticleClient {

    /**
     * 文章列表
     * MyFeignConfiguration 中契约已经改为 Feign 的
     * 参看 :https://github.com/OpenFeign/feign
     */
    //@GetMapping("/article/list")
    @RequestLine("GET /article/list")
    public ApiResult list();

    @RequestLine("GET /article/{id}")
    public ApiResult getInfo(@Param(value = "id") String id);

    /**
     * 根据id查询文章信息
     * @PathVariable(value = "id") 必须指定value参数,不然报错
     */
//    @GetMapping("/article/{id}")
//    public ApiResult getInfo(@PathVariable(value = "id") String id);

}

由于配置类中改变了契约,使用的是Feign的契约。SpringMVC注解不可以使用。

参考Feign 的GitHub:https://github.com/OpenFeign/feign

4、测试:

启动Eureka、文章微服务、FeignJavaUserApplication。

请求:http://127.0.0.1:8081/feign/findArticleById/1

自定义配置—properties:

1、新建springcloud_user_feign_configuration_properties模块:

复制 springcloud_user_feign 改名、父子pom、导入项目。

2、application.yml:

2.1、指定 feignclient 的名称

2.2、不指定feignclient名称,使用default作用所有feignclient

大概意思:如果你同时配置了@Configuration 和 properties,那么properties 优先级高,也可以使用 feign.client.default-to-properties=false 改变。

# feign 的配置
feign:
  client:
    config:
      springcloud-article:
        connectTimeout: 5000
        readTimeout: 5000
        # 日志级别
        loggerLevel: full
#        errorDecoder: com.example.SimpleErrorDecoder
#        retryer: com.example.SimpleRetryer
#        requestInterceptors:
#          - com.example.FooRequestInterceptor
#          - com.example.BarRequestInterceptor
#        decode404: false
#        encoder: com.example.SimpleEncoder
#        decoder: com.example.SimpleDecoder
#        contract: com.example.SimpleContract

# feign 的公共配置 配置所有的 FeignClient 不需要指定feign 的名称, 使用default
#feign:
#  client:
#    config:
#      default:
#        connectTimeout: 5000
#        readTimeout: 5000
#        loggerLevel: basic

Feign 日志:

1、官网介绍

为每一个Feign客户端创建一个日志记录器,其名称默认为feign客户端的全类名。Feign 打印日志只会返回 DEBUG 级别的日志。

2、日志级别指定

2.1、java配置方式中添加:

springcloud_user_feign_configuration_java模块中FeignClient配置类中已添加。

2.2、properties 配置方式

springcloud_user_feign_configuration_properties模块中application.yml 已指定。

3、application.yml 中添加:

# feign 的日志
logging:
  level:
    # Feign 客户端全类名
    com.coolron.user.client.FeignArticleClient: DEBUG

4、测试:

启动Eureka、文章微服务、客户端微服务,请求接口。

java 配置 和 properties 配置的模块控制台都可以打印日志:

可以看到控制台有 DEBUG 级别的日志。

5、若项目中使用logback-spring.xml,而不是在配置文件中配置日志级别。

# logback-spring.xml
<logger name="com.coolron.user.client.FeignArticleClient" level="DEBUG" additivity="false">
    <appender-ref ref="Console"/>
</logger>

总结:

1、可以使用@Configuration(java配置)或 properties(配置文件)覆盖Feign的默认配置。
2、properties 配置优先级高于 java 配置。
3、Feign 的日志配置,只返回 DEBUG 级别日志。

代码地址:

https://gitee.com/cpla026/springcloud/tree/master/springcloud_parent/springcloud_user_feign_configuration_java


https://gitee.com/cpla026/springcloud/tree/master/springcloud_parent/springcloud_user_feign_configuration_properties


个人学习分享
更多 springboot、springcloud、docker 文章,关注微信公众号吧:

猜你喜欢

转载自blog.csdn.net/cp026la/article/details/86608478