httpwebrequest超时时间timeout设置无效_ribbon超时配置max-connect time不生效,总是time out...

1217bee0e282fbdbee6ee76a4052c216.png

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

配置如下:

ribbon

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

无奈,翻源码吧。

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

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

55b33554a9724bb20dae24ff131ff064.png

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

95da3931c1657eadc8030c5f97d642e1.png

​进入其取值方法,进一步跟踪:

d386f9f57cff59cfe58f6c2990cc1649.png

​一番调试(*&.~<>,差点又没忍住!!!),果然发现是默认值50,而不是预先配置的500。(二营长,你他娘的意大利炮呢?)
算了,忍一时风平浪静。经过一番探秘,好像发现了一点门道。CommonClientConfigKey中对这些配置项的定义都是UpperCamel,如图所示:

a5a8f3f561c8fd50c8b6276f32609c3d.png

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

3c097ed46ad3ba925f5cd9e004a94fc9.png

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

1117fcaf32ca357c345c9da26d5146af.png

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

2462db6c426e3d653cf98e96ede247f5.png

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

ba61b4c18e7088f01cf501b750fb849f.png

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

ribbon

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

8cde3d348e5aadc0442f9a97143ed170.png

​大功告成!!!另外,稍微解释一下ribbon的配置格式,借用ribbon原生默认配置类DefaultClientConfigImpl的注释,说的很明白:

b7d2f7e7fccfcb48daaaab3dc961fb75.png

本文系【银河架构师】原创,如需转载请在文章明显处注明作者及出处。

微信搜索【银河架构师】,发现更多精彩内容。

b1dd580226150ff9bfcb51a56f3db6c5.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值