美文网首页
SpringBoot项目第一次Feign调用失败问题总结

SpringBoot项目第一次Feign调用失败问题总结

作者: 万物归于简 | 来源:发表于2020-01-05 17:19 被阅读0次

    Demo项目采用Spring Cloud 微服务架构,各个SpringBoot项目通过Fegin进行相互调用,但是在使用过程中发现,第一次通过Feign调用其它服务时,总会走到熔断器进行熔断。定位发现Hystrix 熔断器的请求默认超时时间是1s。而第一次调用时会进行初始化ribbon相关组件,超过了1s,导致等待结果超时,就熔断了。

    找了很多博客,很多给出的答案都是加大超时时间,比如给5s或者更长,我觉得这个是不正确的。虽然解决了这个问题,但是会有隐患:当这个接口并发大的时候,如果超时时间比较长,则会很快消耗完连接池的连。

    更优雅的解决方式:

    1. 开启ribbon 的饥饿初始化,即服务启动时就初始化ribbon和feign相关组件
    ribbon:
      eager-load:
        enabled: true   #开启饥饿加载 解决第一次feign调用失败的问题
        clients: commodity-center              #需要饥饿加载的服务名称
    
    2. 开启DispatchServlet默认初始化
    spring:
      mvc:
        servlet:
          load-on-startup: 0   # 启动时立即初始化 dispatcherServlet,数值表示延迟多久进行自动初始化dispatcherServlet,0是立即初始化
    

    配置后项目启动日志:


    日志截图

    然后再进行第一次Feign请求,问题已解决。

    相关文章

      网友评论

          本文标题:SpringBoot项目第一次Feign调用失败问题总结

          本文链接:https://www.haomeiwen.com/subject/nfhcactx.html