diff --git a/spring-cloud-netflix-dependencies/pom.xml b/spring-cloud-netflix-dependencies/pom.xml
index 3ed78457f..1cbb74fee 100644
--- a/spring-cloud-netflix-dependencies/pom.xml
+++ b/spring-cloud-netflix-dependencies/pom.xml
@@ -14,7 +14,7 @@
spring-cloud-netflix-dependencies
Spring Cloud Netflix Dependencies
- 2.0.0-rc.3
+ 2.0.0-rc.4
diff --git a/spring-cloud-netflix-eureka-client/src/main/java/org/springframework/cloud/netflix/eureka/CloudEurekaClient.java b/spring-cloud-netflix-eureka-client/src/main/java/org/springframework/cloud/netflix/eureka/CloudEurekaClient.java
index 7647f1330..a430feb3b 100644
--- a/spring-cloud-netflix-eureka-client/src/main/java/org/springframework/cloud/netflix/eureka/CloudEurekaClient.java
+++ b/spring-cloud-netflix-eureka-client/src/main/java/org/springframework/cloud/netflix/eureka/CloudEurekaClient.java
@@ -28,6 +28,7 @@ import com.netflix.discovery.DiscoveryClient;
import com.netflix.discovery.EurekaClientConfig;
import com.netflix.discovery.shared.transport.EurekaHttpClient;
import com.netflix.discovery.shared.transport.EurekaHttpResponse;
+import com.netflix.discovery.shared.transport.jersey.TransportClientFactories;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@@ -57,13 +58,14 @@ public class CloudEurekaClient extends DiscoveryClient {
private final AtomicReference eurekaHttpClient = new AtomicReference<>();
public CloudEurekaClient(ApplicationInfoManager applicationInfoManager, EurekaClientConfig config,
- ApplicationEventPublisher publisher) {
- this(applicationInfoManager, config, null, publisher);
+ TransportClientFactories transportClientFactories, ApplicationEventPublisher publisher) {
+ this(applicationInfoManager, config, transportClientFactories, null, publisher);
}
public CloudEurekaClient(ApplicationInfoManager applicationInfoManager, EurekaClientConfig config,
- AbstractDiscoveryClientOptionalArgs> args, ApplicationEventPublisher publisher) {
- super(applicationInfoManager, config, args);
+ TransportClientFactories transportClientFactories, AbstractDiscoveryClientOptionalArgs> args,
+ ApplicationEventPublisher publisher) {
+ super(applicationInfoManager, config, transportClientFactories, args);
this.applicationInfoManager = applicationInfoManager;
this.publisher = publisher;
this.eurekaTransportField = ReflectionUtils.findField(DiscoveryClient.class, "eurekaTransport");
diff --git a/spring-cloud-netflix-eureka-client/src/main/java/org/springframework/cloud/netflix/eureka/EurekaClientAutoConfiguration.java b/spring-cloud-netflix-eureka-client/src/main/java/org/springframework/cloud/netflix/eureka/EurekaClientAutoConfiguration.java
index 7a8873685..cfcc195bc 100644
--- a/spring-cloud-netflix-eureka-client/src/main/java/org/springframework/cloud/netflix/eureka/EurekaClientAutoConfiguration.java
+++ b/spring-cloud-netflix-eureka-client/src/main/java/org/springframework/cloud/netflix/eureka/EurekaClientAutoConfiguration.java
@@ -47,6 +47,7 @@ import com.netflix.discovery.shared.transport.EurekaHttpResponse;
import com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator;
import com.netflix.discovery.shared.transport.decorator.RetryableEurekaHttpClient;
import com.netflix.discovery.shared.transport.decorator.SessionedEurekaHttpClient;
+import com.netflix.discovery.shared.transport.jersey.TransportClientFactories;
import org.springframework.aop.support.AopUtils;
import org.springframework.aot.hint.MemberCategory;
@@ -261,8 +262,9 @@ public class EurekaClientAutoConfiguration {
@Bean(destroyMethod = "shutdown")
@ConditionalOnMissingBean(value = EurekaClient.class, search = SearchStrategy.CURRENT)
- public EurekaClient eurekaClient(ApplicationInfoManager manager, EurekaClientConfig config) {
- return new CloudEurekaClient(manager, config, this.optionalArgs, this.context);
+ public EurekaClient eurekaClient(ApplicationInfoManager manager, EurekaClientConfig config,
+ TransportClientFactories> transportClientFactories) {
+ return new CloudEurekaClient(manager, config, transportClientFactories, this.optionalArgs, this.context);
}
@Bean
@@ -299,7 +301,8 @@ public class EurekaClientAutoConfiguration {
@org.springframework.cloud.context.config.annotation.RefreshScope
@Lazy
public EurekaClient eurekaClient(ApplicationInfoManager manager, EurekaClientConfig config,
- EurekaInstanceConfig instance, @Autowired(required = false) HealthCheckHandler healthCheckHandler) {
+ EurekaInstanceConfig instance, TransportClientFactories> transportClientFactories,
+ @Autowired(required = false) HealthCheckHandler healthCheckHandler) {
// If we use the proxy of the ApplicationInfoManager we could run into a
// problem
// when shutdown is called on the CloudEurekaClient where the
@@ -314,8 +317,8 @@ public class EurekaClientAutoConfiguration {
else {
appManager = manager;
}
- CloudEurekaClient cloudEurekaClient = new CloudEurekaClient(appManager, config, this.optionalArgs,
- this.context);
+ CloudEurekaClient cloudEurekaClient = new CloudEurekaClient(appManager, config, transportClientFactories,
+ this.optionalArgs, this.context);
cloudEurekaClient.registerHealthCheck(healthCheckHandler);
return cloudEurekaClient;
}
diff --git a/spring-cloud-netflix-eureka-client/src/main/java/org/springframework/cloud/netflix/eureka/config/DiscoveryClientOptionalArgsConfiguration.java b/spring-cloud-netflix-eureka-client/src/main/java/org/springframework/cloud/netflix/eureka/config/DiscoveryClientOptionalArgsConfiguration.java
index ef93a22cf..8cc616a45 100644
--- a/spring-cloud-netflix-eureka-client/src/main/java/org/springframework/cloud/netflix/eureka/config/DiscoveryClientOptionalArgsConfiguration.java
+++ b/spring-cloud-netflix-eureka-client/src/main/java/org/springframework/cloud/netflix/eureka/config/DiscoveryClientOptionalArgsConfiguration.java
@@ -20,6 +20,7 @@ import java.io.IOException;
import java.security.GeneralSecurityException;
import com.netflix.discovery.AbstractDiscoveryClientOptionalArgs;
+import com.netflix.discovery.shared.transport.jersey.TransportClientFactories;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@@ -36,7 +37,9 @@ import org.springframework.cloud.configuration.TlsProperties;
import org.springframework.cloud.netflix.eureka.http.DefaultEurekaClientHttpRequestFactorySupplier;
import org.springframework.cloud.netflix.eureka.http.EurekaClientHttpRequestFactorySupplier;
import org.springframework.cloud.netflix.eureka.http.RestTemplateDiscoveryClientOptionalArgs;
+import org.springframework.cloud.netflix.eureka.http.RestTemplateTransportClientFactories;
import org.springframework.cloud.netflix.eureka.http.WebClientDiscoveryClientOptionalArgs;
+import org.springframework.cloud.netflix.eureka.http.WebClientTransportClientFactories;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.reactive.function.client.WebClient;
@@ -71,6 +74,17 @@ public class DiscoveryClientOptionalArgsConfiguration {
return result;
}
+ @Bean
+ @ConditionalOnClass(name = "org.springframework.web.client.RestTemplate")
+ @ConditionalOnMissingClass("com.sun.jersey.api.client.filter.ClientFilter")
+ @ConditionalOnMissingBean(value = { TransportClientFactories.class }, search = SearchStrategy.CURRENT)
+ @ConditionalOnProperty(prefix = "eureka.client", name = "webclient.enabled", matchIfMissing = true,
+ havingValue = "false")
+ public RestTemplateTransportClientFactories restTemplateTransportClientFactories(
+ RestTemplateDiscoveryClientOptionalArgs optionalArgs) {
+ return new RestTemplateTransportClientFactories(optionalArgs);
+ }
+
@Bean
@ConditionalOnMissingBean
@ConditionalOnClass(name = "org.springframework.web.client.RestTemplate")
@@ -122,6 +136,13 @@ public class DiscoveryClientOptionalArgsConfiguration {
return result;
}
+ @Bean
+ @ConditionalOnMissingBean(value = TransportClientFactories.class, search = SearchStrategy.CURRENT)
+ public WebClientTransportClientFactories webClientTransportClientFactories(
+ ObjectProvider builder) {
+ return new WebClientTransportClientFactories(builder::getIfAvailable);
+ }
+
}
@Configuration
diff --git a/spring-cloud-netflix-eureka-client/src/main/java/org/springframework/cloud/netflix/eureka/http/RestTemplateDiscoveryClientOptionalArgs.java b/spring-cloud-netflix-eureka-client/src/main/java/org/springframework/cloud/netflix/eureka/http/RestTemplateDiscoveryClientOptionalArgs.java
index 4101069bb..0e74905b4 100644
--- a/spring-cloud-netflix-eureka-client/src/main/java/org/springframework/cloud/netflix/eureka/http/RestTemplateDiscoveryClientOptionalArgs.java
+++ b/spring-cloud-netflix-eureka-client/src/main/java/org/springframework/cloud/netflix/eureka/http/RestTemplateDiscoveryClientOptionalArgs.java
@@ -28,7 +28,6 @@ public class RestTemplateDiscoveryClientOptionalArgs extends AbstractDiscoveryCl
public RestTemplateDiscoveryClientOptionalArgs(
EurekaClientHttpRequestFactorySupplier eurekaClientHttpRequestFactorySupplier) {
this.eurekaClientHttpRequestFactorySupplier = eurekaClientHttpRequestFactorySupplier;
- setTransportClientFactories(new RestTemplateTransportClientFactories(this));
}
}
diff --git a/spring-cloud-netflix-eureka-client/src/main/java/org/springframework/cloud/netflix/eureka/http/WebClientDiscoveryClientOptionalArgs.java b/spring-cloud-netflix-eureka-client/src/main/java/org/springframework/cloud/netflix/eureka/http/WebClientDiscoveryClientOptionalArgs.java
index 84834fe64..552162500 100644
--- a/spring-cloud-netflix-eureka-client/src/main/java/org/springframework/cloud/netflix/eureka/http/WebClientDiscoveryClientOptionalArgs.java
+++ b/spring-cloud-netflix-eureka-client/src/main/java/org/springframework/cloud/netflix/eureka/http/WebClientDiscoveryClientOptionalArgs.java
@@ -29,7 +29,6 @@ import org.springframework.web.reactive.function.client.WebClient;
public class WebClientDiscoveryClientOptionalArgs extends AbstractDiscoveryClientOptionalArgs {
public WebClientDiscoveryClientOptionalArgs(Supplier builder) {
- setTransportClientFactories(new WebClientTransportClientFactories(builder));
}
}
diff --git a/spring-cloud-netflix-eureka-client/src/main/java/org/springframework/cloud/netflix/eureka/serviceregistry/EurekaRegistration.java b/spring-cloud-netflix-eureka-client/src/main/java/org/springframework/cloud/netflix/eureka/serviceregistry/EurekaRegistration.java
index b76c720cc..babd71258 100644
--- a/spring-cloud-netflix-eureka-client/src/main/java/org/springframework/cloud/netflix/eureka/serviceregistry/EurekaRegistration.java
+++ b/spring-cloud-netflix-eureka-client/src/main/java/org/springframework/cloud/netflix/eureka/serviceregistry/EurekaRegistration.java
@@ -25,6 +25,7 @@ import com.netflix.appinfo.HealthCheckHandler;
import com.netflix.appinfo.InstanceInfo;
import com.netflix.discovery.EurekaClient;
import com.netflix.discovery.EurekaClientConfig;
+import com.netflix.discovery.shared.transport.jersey.TransportClientFactories;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@@ -181,6 +182,8 @@ public class EurekaRegistration implements Registration {
private ApplicationEventPublisher publisher;
+ private TransportClientFactories> transportClientFactories;
+
Builder(CloudEurekaInstanceConfig instanceConfig) {
this.instanceConfig = instanceConfig;
}
@@ -200,6 +203,11 @@ public class EurekaRegistration implements Registration {
return this;
}
+ public Builder with(TransportClientFactories> transportClientFactories) {
+ this.transportClientFactories = transportClientFactories;
+ return this;
+ }
+
public Builder with(EurekaClientConfig clientConfig, ApplicationEventPublisher publisher) {
this.clientConfig = clientConfig;
this.publisher = publisher;
@@ -216,9 +224,11 @@ public class EurekaRegistration implements Registration {
if (this.eurekaClient == null) {
Assert.notNull(this.clientConfig, "if eurekaClient is null, EurekaClientConfig may not be null");
Assert.notNull(this.publisher, "if eurekaClient is null, ApplicationEventPublisher may not be null");
+ Assert.notNull(this.transportClientFactories,
+ "if eurekaClient is null, TransportClientFactories may not be null");
this.eurekaClient = new CloudEurekaClient(this.applicationInfoManager, this.clientConfig,
- this.publisher);
+ this.transportClientFactories, this.publisher);
}
return new EurekaRegistration(instanceConfig, eurekaClient, applicationInfoManager, healthCheckHandler);
}
diff --git a/spring-cloud-netflix-eureka-client/src/test/java/org/springframework/cloud/netflix/eureka/EurekaClientAutoConfigurationTests.java b/spring-cloud-netflix-eureka-client/src/test/java/org/springframework/cloud/netflix/eureka/EurekaClientAutoConfigurationTests.java
index 25697e199..917106c98 100644
--- a/spring-cloud-netflix-eureka-client/src/test/java/org/springframework/cloud/netflix/eureka/EurekaClientAutoConfigurationTests.java
+++ b/spring-cloud-netflix-eureka-client/src/test/java/org/springframework/cloud/netflix/eureka/EurekaClientAutoConfigurationTests.java
@@ -26,6 +26,7 @@ import com.netflix.appinfo.HealthCheckHandler;
import com.netflix.discovery.AbstractDiscoveryClientOptionalArgs;
import com.netflix.discovery.EurekaClient;
import com.netflix.discovery.EurekaClientConfig;
+import com.netflix.discovery.shared.transport.jersey.TransportClientFactories;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.Test;
import org.mockito.Mockito;
@@ -671,8 +672,9 @@ class EurekaClientAutoConfigurationTests {
@Bean(destroyMethod = "shutdown")
@ConditionalOnMissingBean(value = EurekaClient.class, search = SearchStrategy.CURRENT)
public EurekaClient eurekaClient(ApplicationInfoManager manager, EurekaClientConfig config,
- ApplicationContext context, AbstractDiscoveryClientOptionalArgs optionalArgs) {
- return new CloudEurekaClient(manager, config, optionalArgs, context) {
+ TransportClientFactories> transportClientFactories, ApplicationContext context,
+ AbstractDiscoveryClientOptionalArgs optionalArgs) {
+ return new CloudEurekaClient(manager, config, transportClientFactories, optionalArgs, context) {
@Override
public synchronized void shutdown() {
CountDownLatch latch = countDownLatch();
diff --git a/spring-cloud-netflix-eureka-server/src/main/java/org/springframework/cloud/netflix/eureka/server/EurekaServerAutoConfiguration.java b/spring-cloud-netflix-eureka-server/src/main/java/org/springframework/cloud/netflix/eureka/server/EurekaServerAutoConfiguration.java
index abd5de8a9..0a65ef1db 100644
--- a/spring-cloud-netflix-eureka-server/src/main/java/org/springframework/cloud/netflix/eureka/server/EurekaServerAutoConfiguration.java
+++ b/spring-cloud-netflix-eureka-server/src/main/java/org/springframework/cloud/netflix/eureka/server/EurekaServerAutoConfiguration.java
@@ -28,7 +28,6 @@ import com.netflix.discovery.EurekaClientConfig;
import com.netflix.discovery.converters.EurekaJacksonCodec;
import com.netflix.discovery.converters.wrappers.CodecWrapper;
import com.netflix.discovery.converters.wrappers.CodecWrappers;
-import com.netflix.discovery.shared.transport.EurekaHttpClient;
import com.netflix.discovery.shared.transport.jersey.TransportClientFactories;
import com.netflix.discovery.shared.transport.jersey3.Jersey3TransportClientFactories;
import com.netflix.eureka.DefaultEurekaServerContext;
@@ -39,6 +38,8 @@ import com.netflix.eureka.cluster.PeerEurekaNodes;
import com.netflix.eureka.registry.PeerAwareInstanceRegistry;
import com.netflix.eureka.resources.DefaultServerCodecs;
import com.netflix.eureka.resources.ServerCodecs;
+import com.netflix.eureka.transport.EurekaServerHttpClientFactory;
+import com.netflix.eureka.transport.Jersey3EurekaServerHttpClientFactory;
import com.netflix.eureka.transport.Jersey3ReplicationClient;
import jakarta.servlet.Filter;
import jakarta.servlet.FilterChain;
@@ -71,7 +72,6 @@ import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.cloud.client.actuator.HasFeatures;
import org.springframework.cloud.context.environment.EnvironmentChangeEvent;
import org.springframework.cloud.netflix.eureka.EurekaConstants;
-import org.springframework.cloud.netflix.eureka.config.HostnameBasedUrlRandomizer;
import org.springframework.context.ApplicationListener;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ClassPathScanningCandidateComponentProvider;
@@ -170,25 +170,24 @@ public class EurekaServerAutoConfiguration implements WebMvcConfigurer {
}
@Bean
+ @ConditionalOnMissingBean(TransportClientFactories.class)
public Jersey3TransportClientFactories jersey3TransportClientFactories() {
return Jersey3TransportClientFactories.getInstance();
}
@SuppressWarnings({ "rawtypes", "unchecked" })
@Bean
- public EurekaHttpClient eurekaHttpClient(TransportClientFactories transportClientFactories, Environment env) {
- return transportClientFactories
- .newTransportClientFactory(this.eurekaClientConfig, Collections.emptyList(),
- this.applicationInfoManager.getInfo())
- .newClient(HostnameBasedUrlRandomizer.randomEndpoint(this.eurekaClientConfig, env));
+ public Jersey3EurekaServerHttpClientFactory jersey3EurekaServerHttpClientFactory() {
+ return new Jersey3EurekaServerHttpClientFactory();
}
@Bean
public PeerAwareInstanceRegistry peerAwareInstanceRegistry(ServerCodecs serverCodecs,
- EurekaHttpClient eurekaHttpClient) {
+ EurekaServerHttpClientFactory eurekaServerHttpClientFactory) {
this.eurekaClient.getApplications(); // force initialization
return new InstanceRegistry(this.eurekaServerConfig, this.eurekaClientConfig, serverCodecs, this.eurekaClient,
- eurekaHttpClient, this.instanceRegistryProperties.getExpectedNumberOfClientsSendingRenews(),
+ eurekaServerHttpClientFactory,
+ this.instanceRegistryProperties.getExpectedNumberOfClientsSendingRenews(),
this.instanceRegistryProperties.getDefaultOpenForTrafficCount());
}
diff --git a/spring-cloud-netflix-eureka-server/src/main/java/org/springframework/cloud/netflix/eureka/server/InstanceRegistry.java b/spring-cloud-netflix-eureka-server/src/main/java/org/springframework/cloud/netflix/eureka/server/InstanceRegistry.java
index 0ab3b0168..ff903e50b 100644
--- a/spring-cloud-netflix-eureka-server/src/main/java/org/springframework/cloud/netflix/eureka/server/InstanceRegistry.java
+++ b/spring-cloud-netflix-eureka-server/src/main/java/org/springframework/cloud/netflix/eureka/server/InstanceRegistry.java
@@ -21,11 +21,11 @@ import com.netflix.appinfo.InstanceInfo;
import com.netflix.discovery.EurekaClient;
import com.netflix.discovery.EurekaClientConfig;
import com.netflix.discovery.shared.Application;
-import com.netflix.discovery.shared.transport.EurekaHttpClient;
import com.netflix.eureka.EurekaServerConfig;
import com.netflix.eureka.lease.Lease;
import com.netflix.eureka.registry.PeerAwareInstanceRegistryImpl;
import com.netflix.eureka.resources.ServerCodecs;
+import com.netflix.eureka.transport.EurekaServerHttpClientFactory;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@@ -49,9 +49,9 @@ public class InstanceRegistry extends PeerAwareInstanceRegistryImpl implements A
private final int defaultOpenForTrafficCount;
public InstanceRegistry(EurekaServerConfig serverConfig, EurekaClientConfig clientConfig, ServerCodecs serverCodecs,
- EurekaClient eurekaClient, EurekaHttpClient eurekaHttpClient, int expectedNumberOfClientsSendingRenews,
- int defaultOpenForTrafficCount) {
- super(serverConfig, clientConfig, serverCodecs, eurekaClient, eurekaHttpClient);
+ EurekaClient eurekaClient, EurekaServerHttpClientFactory eurekaServerHttpClientFactory,
+ int expectedNumberOfClientsSendingRenews, int defaultOpenForTrafficCount) {
+ super(serverConfig, clientConfig, serverCodecs, eurekaClient, eurekaServerHttpClientFactory);
this.expectedNumberOfClientsSendingRenews = expectedNumberOfClientsSendingRenews;
this.defaultOpenForTrafficCount = defaultOpenForTrafficCount;