From 7b159e9c047f536e87b188c51372430ea02a946b Mon Sep 17 00:00:00 2001 From: Haotian Zhang <928016560@qq.com> Date: Fri, 29 Aug 2025 10:59:28 +0800 Subject: [PATCH] feat:call choose method when eagerly initializing the load-balancers. Signed-off-by: Haotian Zhang <928016560@qq.com> --- .../LoadBalancerEagerContextInitializer.java | 26 ++++++++++++++++--- 1 file changed, 22 insertions(+), 4 deletions(-) diff --git a/spring-cloud-loadbalancer/src/main/java/org/springframework/cloud/loadbalancer/support/LoadBalancerEagerContextInitializer.java b/spring-cloud-loadbalancer/src/main/java/org/springframework/cloud/loadbalancer/support/LoadBalancerEagerContextInitializer.java index 7a72cb6844..3842bafe7c 100644 --- a/spring-cloud-loadbalancer/src/main/java/org/springframework/cloud/loadbalancer/support/LoadBalancerEagerContextInitializer.java +++ b/spring-cloud-loadbalancer/src/main/java/org/springframework/cloud/loadbalancer/support/LoadBalancerEagerContextInitializer.java @@ -16,16 +16,24 @@ package org.springframework.cloud.loadbalancer.support; -import java.util.List; - +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; import org.springframework.boot.context.event.ApplicationReadyEvent; +import org.springframework.cloud.client.ServiceInstance; +import org.springframework.cloud.client.loadbalancer.Response; +import org.springframework.cloud.client.loadbalancer.reactive.ReactiveLoadBalancer; import org.springframework.context.ApplicationListener; +import reactor.core.publisher.Mono; + +import java.util.List; /** - * @author Andrii Bohutskyi + * @author Andrii Bohutskyi, Haotian Zhang */ public class LoadBalancerEagerContextInitializer implements ApplicationListener { + private static final Log log = LogFactory.getLog(LoadBalancerEagerContextInitializer.class); + private final LoadBalancerClientFactory factory; private final List serviceNames; @@ -37,7 +45,17 @@ public LoadBalancerEagerContextInitializer(LoadBalancerClientFactory factory, Li @Override public void onApplicationEvent(ApplicationReadyEvent applicationReadyEvent) { - serviceNames.forEach(factory::getInstance); + serviceNames.forEach(serviceName -> { + ReactiveLoadBalancer loadBalancer = factory.getInstance(serviceName); + if (loadBalancer != null) { + Response loadBalancerResponse = Mono.from(loadBalancer.choose()).block(); + if (log.isDebugEnabled() && loadBalancerResponse != null) { + log.debug("LoadBalancer for service: " + serviceName + " initialized with chosen instance: " + + loadBalancerResponse.getServer().getHost() + ":" + loadBalancerResponse.getServer().getPort()); + } + log.info("LoadBalancer for service: " + serviceName + " initialized"); + } + }); } }