Ribbon - 负载均衡流程中提到,serviceId对应的AnnotationConfigApplicationContext在第一次调用的时候才建立(因此叫懒加载),那有可能形成调用的超时,那有没有办法提早加载呢?
在RibbonAutoConfiguration类中,有个RibbonApplicationContextInitializer,若是不须要懒加载,咱们就须要ribbon.eager-load.enabled的值为true。spring
@Bean @ConditionalOnProperty("ribbon.eager-load.enabled") public RibbonApplicationContextInitializer ribbonApplicationContextInitializer() { return new RibbonApplicationContextInitializer(springClientFactory(), ribbonEagerLoadProperties.getClients()); }
RibbonApplicationContextInitializer是实现ApplicationListener<ApplicationReadyEvent>,因此当上下文准备好的时候,就会调用onApplicationEvent方法,而后继续调用initialize方法,因此咱们并非说ribbon.eager-load.enabled的值设置true就能够的,还须要设置clientNames。segmentfault
protected void initialize() { if (clientNames != null) { for (String clientName : clientNames) { this.springClientFactory.getContext(clientName); } } }
为了去掉懒加载,个人配置以下,clients能够是多个:负载均衡
ribbon: eager-load: enabled: true clients: eureka-provider