![1217bee0e282fbdbee6ee76a4052c216.png](https://i-blog.csdnimg.cn/blog_migrate/b560c0e01bda2a1a7140be40bb6ddb79.jpeg)
前段产品自测阶段,发现了一个令人头疼的问题,服务启动之后,总是在一段时间之内time out。扒拉了许久代码,发现是网关中ribbon的超时配置不管用,还是默认配置,而本地环境启动访问太多,总是时不时就超时了。于是,决定深入研究一下。
配置如下:
ribbon
发现无论如何都不生效,总是超时。手动黑人问号脸!!!
无奈,翻源码吧。
得益于idea的强大,没多久就找到了DefaultClientConfigImpl,进而找到了IClientConfig、CommonClientConfigKey、RibbonProperties、HttpClientRibbonConfiguration等类。
首先,DefaultClientConfigImpl各种逻辑,就一段最重要:
![55b33554a9724bb20dae24ff131ff064.png](https://i-blog.csdnimg.cn/blog_migrate/701d4239bf31ecc2641222cce0c8ffe0.jpeg)
怎么办?打上个断点,调戏一番。咳咳,错了错了,是调试,调试,粗鲁了。
![95da3931c1657eadc8030c5f97d642e1.png](https://i-blog.csdnimg.cn/blog_migrate/afef5c8b84dc50fb9509ee2d277b86ae.jpeg)
进入其取值方法,进一步跟踪:
![d386f9f57cff59cfe58f6c2990cc1649.png](https://i-blog.csdnimg.cn/blog_migrate/5ab7a1ee53ff286755c0a5fae5137b8a.png)
一番调试(*&.~<>,差点又没忍住!!!),果然发现是默认值50,而不是预先配置的500。(二营长,你他娘的意大利炮呢?)
算了,忍一时风平浪静。经过一番探秘,好像发现了一点门道。CommonClientConfigKey中对这些配置项的定义都是UpperCamel,如图所示:
![a5a8f3f561c8fd50c8b6276f32609c3d.png](https://i-blog.csdnimg.cn/blog_migrate/0e93fecceaf7bcad30772ad65e3203c3.jpeg)
难道不支持自动转换吗?又去cloud源码spring-cloud-starter-netflix-ribbon、spring-cloud-netflix-ribbon中找了一通,发现了一段逻辑:
![3c097ed46ad3ba925f5cd9e004a94fc9.png](https://i-blog.csdnimg.cn/blog_migrate/a556ffb97e758b0a203b6fd67f8d431e.jpeg)
都是从原生配置类中获取参数值,而原生ribbon获取配置逻辑如下:
![1117fcaf32ca357c345c9da26d5146af.png](https://i-blog.csdnimg.cn/blog_migrate/a047b231932ae5cf024dd4c6a77380cf.jpeg)
至于ConfigurationManager是个什么鬼,看下代码:
![2462db6c426e3d653cf98e96ede247f5.png](https://i-blog.csdnimg.cn/blog_migrate/1135930e2cb39415edbee8c7a16436d1.jpeg)
不管是啥,反正是获取系统配置。获取完配置以后,再设置到系统变量中。
![ba61b4c18e7088f01cf501b750fb849f.png](https://i-blog.csdnimg.cn/blog_migrate/2584226478e373fd4ed0e9f84ca9a6e9.jpeg)
看到这里,应该就明白了,这货竟然使用的是自己CommonClientConfigKey配置类的原始UpperCamel格式的property name,WTF?改改试试吧:
ribbon
再次调试(这次忍住了,哈哈哈哈!)
![8cde3d348e5aadc0442f9a97143ed170.png](https://i-blog.csdnimg.cn/blog_migrate/8624004a6c0ebbf06b3ff27d7daec460.png)
大功告成!!!另外,稍微解释一下ribbon的配置格式,借用ribbon原生默认配置类DefaultClientConfigImpl的注释,说的很明白:
![b7d2f7e7fccfcb48daaaab3dc961fb75.png](https://i-blog.csdnimg.cn/blog_migrate/1610dff25b8a6f09a20f0c4bbebabbd3.jpeg)
本文系【银河架构师】原创,如需转载请在文章明显处注明作者及出处。
微信搜索【银河架构师】,发现更多精彩内容。
![b1dd580226150ff9bfcb51a56f3db6c5.png](https://i-blog.csdnimg.cn/blog_migrate/0986f6baef33b5efd2799f8b8f946f6f.jpeg)