Spring Cloud Edgware新特性之三:使用配置属性自定义Feign的行为

Spring Cloud是当前炙手可热的微服务开发框架。它的功能强大,组件丰富,设计优雅。目前Spring Cloud还在不断发展之中。

Spring Cloud即将发布 SpringCloudEdgware 版本。该版本解决了不少Bug,新增了不少新特性,本系列博客将为大家详细阐述在Spring Cloud Edgware中新增的特性。

我们知道:

  • Ribbon在 SpringCloudBrixton 版中,只能使用Java代码自定义配置
  • Ribbon在 SpringCloudCamden 版中,可使用Java代码自定义配置,也可使用配置属性自定义配置,两者等价。配置属性配置的方式为我们带来更好的使用体验和开发效率。
  • Feign使用Java代码自定义配置的方式跟Ribbon非常类似
  • 遗憾的是:在 SpringCloudCamden 中,Feign依然不支持使用配置属性来自定义配置。

该遗憾已在 SpringCloudEdgware 得到了填补——从此,Feign也支持配置属性自定义配置啦!

下面我们来看看如何使用配置属性自定义Feign的行为

配置指定名称的Feign Client

对于一个指定名称的Feign Client(例如该Feign Client的名称为 feignName ):

feign:
  client:
    config:
      feignName:
        connectTimeout: 5000  # 相当于Request.Options
        readTimeout: 5000     # 相当于Request.Options
        # 配置Feign的日志级别,相当于代码配置方式中的Logger
        loggerLevel: full
        # Feign的错误解码器,相当于代码配置方式中的ErrorDecoder
        errorDecoder: com.example.SimpleErrorDecoder
        # 配置重试,相当于代码配置方式中的Retryer
        retryer: com.example.SimpleRetryer
        # 配置拦截器,相当于代码配置方式中的RequestInterceptor
        requestInterceptors:
          - com.example.FooRequestInterceptor
          - com.example.BarRequestInterceptor
        decode404: false

通用配置

上面讨论了如何配置特定名称的Feign Client,那么如果想为所有的Feign Client都进行配置,该怎么办呢?我们知道, @EnableFeignClients 注解上有个 defaultConfiguration 属性,我们可以将默认配置写成一个类,然后用 defaultConfiguration 来引用,例如:

@EnableFeignClients(defaultConfiguration = DefaultRibbonConfig.class)

那么如果想使用配置属性该怎么办呢?

如果你想配置所有的Feign Client,只需像如下配置即可:

feign:
  client:
    config:
      default:
        connectTimeout: 5000
        readTimeout: 5000
        loggerLevel: basic

如果你不小心又使用了Java代码配置Feign,同时又使用了配置属性配置Feign,那么使用配置属性的优先级更高。配置属性配置的方式将会覆盖Java代码配置。如果你想修改代码配置方式的优先级,可使用如下属性: feign.client.default-to-properties=false

TIPS:

  • 使用代码自定义Feign的官方文档:http://cloud.spring.io/spring-cloud-static/Camden.SR3/#spring-cloud-feign-overriding-defaults
  • 引入该特性的相关pull request:https://github.com/spring-cloud/spring-cloud-netflix/pull/1942
  • 个人并不建议配置retryer,Spring Cloud Camden以及之后的版本中,Spring Cloud关闭了Feign的重试,而是使用Ribbon的重试。如果自己再定义Feign的重试后,那么可能会造成重试特性的混乱。笔者已在https://github.com/spring-cloud/spring-cloud-netflix/issues/2330 提出该问题。

原文发布于微信公众号 - A周立SpringCloud(gh_e6849e368b5f)

原文发表时间:2017-10-26

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏杨建荣的学习笔记

MySQL源码安装总结(r12笔记第12天)

作为一个DBA, MySQL源码安装还是要做做的,虽然不是推荐线上批量安装部署,但是自己作为了解MySQL的一个学习过程,还是值得的。 相比商业...

33170
来自专栏醉生梦死

禁止root远程登录及修改ssh默认端口号

    提示输入密码,输入正确的密码后,一直提示输入,其实是禁止了root远程登录

43640
来自专栏小狼的世界

Analog使用中的一些技巧和总结

Analog是一款用来快速处理日志的开源工具,具有很高的效率,但是生成的结果并不美观,本文就analog使用过程中的一些问题进行总结,讨论如何对analog进行...

9610
来自专栏沈唁志

PHP扩展模块一览及简要说明

83840
来自专栏运维

排查logstash2.4升级到5.0版本后kafka不兼容问题

之前对ELKB环境从2.4版本升级到最新的5.0稳定版本,主要升级步骤可以参考http://jerrymin.blog.51cto.com/3002256/18...

15610
来自专栏orientlu

FreeRTOS 任务通知

FreeRTOS 从版本 V8.2.0开始提供任务通知这个功能,每个任务都有一个32位的通知值。按照 FreeRTOS 官方的说法,使用消息通知比通过二进制信...

23520
来自专栏伦少的博客

spark-submit报错: java.sql.SQLException:No suitable driver

转载请务必注明原创地址为:http://dongkelun.com/2018/05/06/sparkSubmitException/

55150
来自专栏散尽浮华

Mysql备份系列(2)--mysqldump备份(全量+增量)方案操作记录

在日常运维工作中,对mysql数据库的备份是万分重要的,以防在数据库表丢失或损坏情况出现,可以及时恢复数据。 线上数据库备份场景: 每周日执行一次全量备份,然后...

62090
来自专栏玩转JavaEE

Spring Cloud Stream使用细节

上篇文章我们看了Spring Cloud Stream的基本使用,小伙伴们对Spring Cloud Stream应该也有了一个基本的了解,但是上篇文章中的消息...

46660
来自专栏自由而无用的灵魂的碎碎念

Boot Manager菜单的显示语言设置

我的系统原来是Windows Vista中文版,最近又以双系统的方式安装了Windows 7 RC 英文版。这样原来的启动的操作系统的选择菜单、F8高级启动菜单...

8320

扫码关注云+社区

领取腾讯云代金券