zoukankan      html  css  js  c++  java
  • 避坑指南(〇):ribbon超时配置不生效

    转载请注明作者及出处:

    作者:银河架构师

    原文链接:https://www.cnblogs.com/luas/p/12089578.html

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

    配置如下:

    ribbon:  
        httpclient:    
            enabled: true  
        max-connections-per-host: 500  
        max-total-connections: 2000 
        connect-timeout: 60000  
        read-timeout: 60000        

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

    无奈,翻源码吧。

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

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

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

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

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

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

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

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

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

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

    ribbon:  
        httpclient:      
            enabled: true  
        MaxConnectionsPerHost: 500  
        MaxTotalConnections: 2000  
        ConnectTimeout: 60000  
        ReadTimeout: 60000    

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

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

    --------------------------------------------------------------------------------------------------------------------------------------------    END    ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------

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

     技术资料领取方法:关注公众号,回复微服务,领取微服务相关电子书;回复MK精讲,领取MK精讲系列电子书;回复JAVA 进阶,领取JAVA进阶知识相关电子书;回复JAVA面试,领取JAVA面试相关电子书,回复JAVA WEB领取JAVA WEB相关电子书。

    image.png

  • 相关阅读:
    3D标签云
    IntelliJ IDEA 13.1.1版本偶然的错误
    414. Third Maximum Number
    217. Contains Duplicate
    442.Find All Duplicates in an Array
    3D轮播图
    448. Find All Numbers Disappeared in an Array
    Beautifulsoup模块
    MySQL数据库
    常用模块
  • 原文地址:https://www.cnblogs.com/luas/p/12089578.html
Copyright © 2011-2022 走看看