您的位置 首页 > 德语词汇

ribbon的 ribbon,不带这么坑人的

大家好,今天来为大家解答ribbon的这个问题的一些问题点,包括ribbon,不带这么坑人的也一样很多人还不知道,因此呢,今天就来为大家分析分析,现在让我们一起来看看吧!如果解决了您的问题,还望您关注下本站哦,谢谢~

1、前段产品自测阶段,发现了一个令人头疼的问题,服务启动之后,总是在一段时间之内timeout。扒拉了许久代码,发现是网关中ribbon的超时配置不管用,还是默认配置,而本地环境启动访问太多,总是时不时就超时了。于是,决定深入研究一下。

ribbon的 ribbon,不带这么坑人的

2、ribbon:\nhttpclient:\nenabled:true\nmax-connections-per-host:500\nmax-total-connections:2000\nconnect-timeout:60000\nread-timeout:60000

发现无论如何都不生效,总是超时。手动黑人问号脸!!!

3、得益于idea的强大,没多久就找到了DefaultClientConfigImpl,进而找到了IClientConfig、CommonClientConfigKey、RibbonProperties、HttpClientRibbonConfiguration等类。

4、首先,DefaultClientConfigImpl各种逻辑,就一段最重要:

5、怎么办?打上个断点,调戏一番。咳咳,错了错了,是调试,调试,粗鲁了。

6、一番调试(*&.~<>,差点又没忍住!!!),果然发现是默认值50,而不是预先配置的500。(二营长,你他娘的意大利炮呢?)

7、算了,忍一时风平浪静。经过一番探秘,好像发现了一点门道。CommonClientConfigKey中对这些配置项的定义都是UpperCamel,如图所示:

8、难道不支持自动转换吗?又去cloud源码spring-cloud-starter-netflix-ribbon、spring-cloud-netflix-ribbon中找了一通,发现了一段逻辑:

9、都是从原生配置类中获取参数值,而原生ribbon获取配置逻辑如下:

10、至于ConfigurationManager是个什么鬼,看下代码:

11、不管是啥,反正是获取系统配置。获取完配置以后,再设置到系统变量中。

12、看到这里,应该就明白了,这货竟然使用的是自己CommonClientConfigKey配置类的原始UpperCamel格式的propertyname,WTF?改改试试吧:

13、ribbon:\nhttpclient:\nenabled:true\nMaxConnectionsPerHost:500\nMaxTotalConnections:2000\nConnectTimeout:60000\nReadTimeout:60000

再次调试(这次忍住了,哈哈哈哈!)

14、另外,稍微解释一下ribbon的配置格式,借用ribbon原生默认配置类DefaultClientConfigImpl的注释,说的很明白:

关于ribbon的的内容到此结束,希望对大家有所帮助。

本站涵盖的内容、图片、视频等数据,部分未能与原作者取得联系。若涉及版权问题,请及时通知我们并提供相关证明材料,我们将及时予以删除!谢谢大家的理解与支持!

Copyright © 2023