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

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调用失败问题总结)