From b3e6159bbbd787b25cbc4ae571c2864a0b756e5c Mon Sep 17 00:00:00 2001 From: Marcin Grzejszczak Date: Fri, 22 Dec 2017 12:23:09 +0100 Subject: [PATCH] Using the new registration mechanism without this change we're using Eureka lite to register the apps. However we're not reusing any mechanisms that are bound to registration of the main app. That's why we also loose the OAuth2 instrumentation of Spring Cloud Services. with this change we're reusing the default mechanism. For Cloud based applications we also register the stubs under a different route so as to support the multiple port binding. fixes gh-490 --- .../cloud/eureka/ApplicationStatus.java | 25 -- .../spring/cloud/eureka/Eureka.java | 335 ------------------ .../cloud/eureka/EurekaStubsRegistrar.java | 91 +++-- .../spring/cloud/eureka/Registration.java | 45 --- ...nerSpringCloudEurekaAutoConfiguration.java | 29 +- 5 files changed, 85 insertions(+), 440 deletions(-) delete mode 100644 spring-cloud-contract-stub-runner/src/main/java/org/springframework/cloud/contract/stubrunner/spring/cloud/eureka/ApplicationStatus.java delete mode 100644 spring-cloud-contract-stub-runner/src/main/java/org/springframework/cloud/contract/stubrunner/spring/cloud/eureka/Eureka.java delete mode 100644 spring-cloud-contract-stub-runner/src/main/java/org/springframework/cloud/contract/stubrunner/spring/cloud/eureka/Registration.java diff --git a/spring-cloud-contract-stub-runner/src/main/java/org/springframework/cloud/contract/stubrunner/spring/cloud/eureka/ApplicationStatus.java b/spring-cloud-contract-stub-runner/src/main/java/org/springframework/cloud/contract/stubrunner/spring/cloud/eureka/ApplicationStatus.java deleted file mode 100644 index 40ac6ab529..0000000000 --- a/spring-cloud-contract-stub-runner/src/main/java/org/springframework/cloud/contract/stubrunner/spring/cloud/eureka/ApplicationStatus.java +++ /dev/null @@ -1,25 +0,0 @@ -package org.springframework.cloud.contract.stubrunner.spring.cloud.eureka; - -import com.netflix.appinfo.InstanceInfo; - -public class ApplicationStatus { - private Application application; - private InstanceInfo.InstanceStatus status; - - public ApplicationStatus(Application application, - InstanceInfo.InstanceStatus status) { - this.application = application; - this.status = status; - } - - public ApplicationStatus() { - } - - public Application getApplication() { - return this.application; - } - - public InstanceInfo.InstanceStatus getStatus() { - return this.status; - } -} diff --git a/spring-cloud-contract-stub-runner/src/main/java/org/springframework/cloud/contract/stubrunner/spring/cloud/eureka/Eureka.java b/spring-cloud-contract-stub-runner/src/main/java/org/springframework/cloud/contract/stubrunner/spring/cloud/eureka/Eureka.java deleted file mode 100644 index ddd176de26..0000000000 --- a/spring-cloud-contract-stub-runner/src/main/java/org/springframework/cloud/contract/stubrunner/spring/cloud/eureka/Eureka.java +++ /dev/null @@ -1,335 +0,0 @@ -package org.springframework.cloud.contract.stubrunner.spring.cloud.eureka; - -import java.lang.invoke.MethodHandles; -import java.util.Collection; -import java.util.Collections; -import java.util.concurrent.Executors; -import java.util.concurrent.ScheduledExecutorService; -import java.util.concurrent.TimeUnit; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.springframework.cloud.commons.util.InetUtils; -import org.springframework.cloud.netflix.eureka.CloudEurekaClient; -import org.springframework.cloud.netflix.eureka.EurekaClientConfigBean; -import org.springframework.cloud.netflix.eureka.EurekaInstanceConfigBean; -import org.springframework.cloud.netflix.eureka.InstanceInfoFactory; -import org.springframework.http.HttpStatus; - -import com.fasterxml.jackson.annotation.JsonIgnore; -import com.netflix.appinfo.InstanceInfo; -import com.netflix.discovery.EurekaClientConfig; -import com.netflix.discovery.shared.Applications; -import com.netflix.discovery.shared.resolver.ClosableResolver; -import com.netflix.discovery.shared.resolver.EurekaEndpoint; -import com.netflix.discovery.shared.resolver.aws.ApplicationsResolver; -import com.netflix.discovery.shared.resolver.aws.AwsEndpoint; -import com.netflix.discovery.shared.transport.EurekaHttpClient; -import com.netflix.discovery.shared.transport.EurekaHttpClientFactory; -import com.netflix.discovery.shared.transport.EurekaHttpClients; -import com.netflix.discovery.shared.transport.EurekaHttpResponse; -import com.netflix.discovery.shared.transport.EurekaTransportConfig; -import com.netflix.discovery.shared.transport.TransportClientFactory; -import com.netflix.discovery.shared.transport.decorator.MetricsCollectingEurekaHttpClient; -import com.netflix.discovery.shared.transport.jersey.JerseyEurekaHttpClientFactory; -import com.sun.jersey.api.client.filter.ClientFilter; - -import static java.util.concurrent.TimeUnit.SECONDS; - -/** - * Taken from https://github.com/spencergibb/spring-cloud-netflix-eureka-lite - * - * @author Spencer Gibb - * - * @since 1.0.0 - */ -public class Eureka { - - private static final Log log = LogFactory.getLog(MethodHandles.lookup().lookupClass()); - - private final InetUtils inetUtils; - final CloudEurekaClient eurekaClient; - final EurekaClientConfigBean clientConfig; - final EurekaTransport transport; - - public Eureka(InetUtils inetUtils, EurekaClientConfigBean eurekaClientConfigBean, CloudEurekaClient eurekaClient) { - this.inetUtils = inetUtils; - this.eurekaClient = eurekaClient; - this.clientConfig = new EurekaClientConfigBean(); - this.clientConfig.setRegisterWithEureka(false); // turn off registering with eureka, let apps send heartbeats. - this.clientConfig.setServiceUrl(eurekaClientConfigBean.getServiceUrl()); - this.transport = createTransport(); - } - - public Registration register(Application application) { - long start = System.currentTimeMillis(); - if (log.isDebugEnabled()) { - log.debug(String.format("Starting registration of %s", application)); - } - InstanceInfo instanceInfo = getInstanceInfo(application); - Registration registration = new Registration(instanceInfo, application); - long duration = (System.currentTimeMillis() - start) ; - if (log.isDebugEnabled()) { - log.debug(String.format("Created registration for %s in %s ms", application, duration)); - } - register(registration); - return registration; - } - - public InstanceInfo getInstanceInfo(Application application, long lastUpdatedTimestamp, long lastDirtyTimestamp) { - InstanceInfo instanceInfo = getInstanceInfo(application); - instanceInfo = new InstanceInfo.Builder(instanceInfo) - .setLastDirtyTimestamp(lastDirtyTimestamp) - .setLastUpdatedTimestamp(lastUpdatedTimestamp) - .build(); - return instanceInfo; - } - - public InstanceInfo getInstanceInfo(Application application) { - EurekaInstanceConfigBean instanceConfig = new EurekaInstanceConfigBean(this.inetUtils); - instanceConfig.setInstanceEnabledOnit(true); - instanceConfig.setAppname(application.getName()); - instanceConfig.setVirtualHostName(application.getName()); - instanceConfig.setInstanceId(application.getInstance_id()); - instanceConfig.setHostname(application.getHostname()); - instanceConfig.setNonSecurePort(application.getPort()); - - return new InstanceInfoFactory().create(instanceConfig); - } - - public EurekaTransport createTransport() { - TransportClientFactory transportClientFactory = newTransportClientFactory(this.clientConfig, Collections.emptyList()); - EurekaTransportConfig transportConfig = this.clientConfig.getTransportConfig(); - - ClosableResolver bootstrapResolver = EurekaHttpClients.newBootstrapResolver( - this.clientConfig, - transportConfig, - transportClientFactory, - null, - new ApplicationsResolver.ApplicationsSource() { - @Override - public Applications getApplications(int stalenessThreshold, TimeUnit timeUnit) { - long thresholdInMs = TimeUnit.MILLISECONDS.convert(stalenessThreshold, timeUnit); - long delay = Eureka.this.eurekaClient.getLastSuccessfulRegistryFetchTimePeriod(); - if (delay > thresholdInMs) { - log.info(String.format("Local registry is too stale for local lookup. Threshold:%s, actual:%s", - thresholdInMs, delay)); - return null; - } else { - return Eureka.this.eurekaClient.getApplications(); - } - } - } - ); - - EurekaHttpClientFactory httpClientFactory; - try { - httpClientFactory = EurekaHttpClients.registrationClientFactory( - bootstrapResolver, - transportClientFactory, - transportConfig - ); - } catch (Exception e) { - log.warn("Experimental transport initialization failure", e); - throw new RuntimeException(e); - } - - return new EurekaTransport(httpClientFactory, httpClientFactory.newClient(), transportClientFactory, bootstrapResolver); - } - - public static TransportClientFactory newTransportClientFactory( - final EurekaClientConfig clientConfig, - final Collection additionalFilters) { - final TransportClientFactory jerseyFactory = JerseyEurekaHttpClientFactory.create( - clientConfig, additionalFilters, null, null); - final TransportClientFactory metricsFactory = MetricsCollectingEurekaHttpClient.createFactory(jerseyFactory); - - return new TransportClientFactory() { - @Override - public EurekaHttpClient newClient(EurekaEndpoint serviceUrl) { - return metricsFactory.newClient(serviceUrl); - } - - @Override - public void shutdown() { - metricsFactory.shutdown(); - jerseyFactory.shutdown(); - } - }; - } - - /** - * Renew with the eureka service by making the appropriate REST call - */ - public boolean renew(Registration registration) { - InstanceInfo instanceInfo = registration.getInstanceInfo(); - EurekaHttpResponse httpResponse; - try { - httpResponse = this.transport.getEurekaHttpClient().sendHeartBeat(instanceInfo.getAppName(), instanceInfo.getId(), instanceInfo, null); - if (log.isDebugEnabled()) { - log.debug(String.format("EurekaLite_%s/%s - Heartbeat status: %s", instanceInfo.getAppName(), instanceInfo.getId(), httpResponse.getStatusCode())); - } - if (httpResponse.getStatusCode() == HttpStatus.NOT_FOUND.value()) { - log.info(String.format("EurekaLite_%s/%s - Re-registering apps/%s", instanceInfo.getAppName(), instanceInfo.getId(), instanceInfo.getAppName())); - return register(registration); - } - return httpResponse.getStatusCode() == HttpStatus.OK.value(); - } catch (Exception e) { - log.error("EurekaLite_"+instanceInfo.getAppName()+"/"+ instanceInfo.getId() + " - was unable to send heartbeat!", e); - return false; - } - } - - /** - * Register with the eureka service by making the appropriate REST call. - */ - protected boolean register(Registration registration) { - InstanceInfo instanceInfo = registration.getInstanceInfo(); - log.info(String.format("EurekaLite_%s/%s: registering service...", instanceInfo.getAppName(), instanceInfo.getId())); - EurekaHttpResponse httpResponse; - try { - httpResponse = this.transport.getEurekaHttpClient().register(instanceInfo); - } catch (Exception e) { - log.warn("EurekaLite_"+instanceInfo.getAppName()+"/"+ instanceInfo.getId() + " - registration failed " + e.getMessage(), e); - throw e; - } - if (log.isInfoEnabled()) { - log.info(String.format("EurekaLite_%s/%s - registration status: %s", instanceInfo.getAppName(), instanceInfo.getId(), httpResponse.getStatusCode())); - } - return httpResponse.getStatusCode() == HttpStatus.NO_CONTENT.value(); - } - - public void shutdown(Registration registration) { - InstanceInfo instanceInfo = registration.getInstanceInfo(); - try { - EurekaHttpResponse httpResponse = this.transport.getEurekaHttpClient().cancel(instanceInfo.getAppName(), instanceInfo.getInstanceId()); - log.info(String.format("EurekaLite_%s/%s - deregister status: %s", instanceInfo.getAppName(), instanceInfo.getId(), httpResponse.getStatusCode())); - } catch (Exception e) { - log.error("EurekaLite_"+instanceInfo.getAppName()+"/"+ instanceInfo.getId() + " - de-registration failed " + e.getMessage(), e); - } - this.transport.shutdown(); - } -} - -/** - * Taken from https://github.com/spencergibb/spring-cloud-netflix-eureka-lite - * - * @author Spencer Gibb - * - * @since 1.0.0 - */ -class EurekaTransport { - private final EurekaHttpClientFactory eurekaHttpClientFactory; - private final EurekaHttpClient eurekaHttpClient; - private final TransportClientFactory transportClientFactory; - private final ClosableResolver closableResolver; - - public EurekaTransport(EurekaHttpClientFactory eurekaHttpClientFactory, - EurekaHttpClient eurekaHttpClient, - TransportClientFactory transportClientFactory, - ClosableResolver closableResolver) { - this.eurekaHttpClientFactory = eurekaHttpClientFactory; - this.eurekaHttpClient = eurekaHttpClient; - this.transportClientFactory = transportClientFactory; - this.closableResolver = closableResolver; - } - - public void shutdown() { - this.eurekaHttpClientFactory.shutdown(); - this.eurekaHttpClient.shutdown(); - this.transportClientFactory.shutdown(); - this.closableResolver.shutdown(); - } - - public EurekaHttpClientFactory getEurekaHttpClientFactory() { - return this.eurekaHttpClientFactory; - } - - public EurekaHttpClient getEurekaHttpClient() { - return this.eurekaHttpClient; - } - - public TransportClientFactory getTransportClientFactory() { - return this.transportClientFactory; - } - - public ClosableResolver getClosableResolver() { - return this.closableResolver; - } -} - -/** - * Taken from https://github.com/spencergibb/spring-cloud-netflix-eureka-lite - * - * @author Spencer Gibb - * - * @since 1.0.0 - */ -class Application { - private String name; - private String instance_id; - private String hostname; - private int port; - - public Application(String name, String instance_id, String hostname, int port) { - this.name = name; - this.instance_id = instance_id; - this.hostname = hostname; - this.port = port; - } - - public Application() { - } - - @JsonIgnore - public String getRegistrationKey() { - return computeRegistrationKey(this.name, this.instance_id); - } - - static String computeRegistrationKey(String name, String instanceId) { - return name + ":" + instanceId; - } - - public String getName() { - return this.name; - } - - public String getInstance_id() { - return this.instance_id; - } - - public String getHostname() { - return this.hostname; - } - - public int getPort() { - return this.port; - } -} - -/** - * Scheduled service that automatically will renew registrations in Eureka - */ -class Renewer implements Runnable { - - private static final Log log = LogFactory.getLog(MethodHandles.lookup().lookupClass()); - - final Eureka eureka; - final Registration registration; - final ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1); - - Renewer(int flushInterval, Eureka eureka, - Registration registration) { - this.eureka = eureka; - this.registration = registration; - this.scheduler.scheduleWithFixedDelay(this, 0, flushInterval, SECONDS); - } - - @Override - public void run() { - if (log.isTraceEnabled()) { - log.trace("Renewing registration [" + this.registration + "]"); - } - this.eureka.renew(this.registration); - } -} \ No newline at end of file diff --git a/spring-cloud-contract-stub-runner/src/main/java/org/springframework/cloud/contract/stubrunner/spring/cloud/eureka/EurekaStubsRegistrar.java b/spring-cloud-contract-stub-runner/src/main/java/org/springframework/cloud/contract/stubrunner/spring/cloud/eureka/EurekaStubsRegistrar.java index 5210c97056..b15e3c1366 100644 --- a/spring-cloud-contract-stub-runner/src/main/java/org/springframework/cloud/contract/stubrunner/spring/cloud/eureka/EurekaStubsRegistrar.java +++ b/spring-cloud-contract-stub-runner/src/main/java/org/springframework/cloud/contract/stubrunner/spring/cloud/eureka/EurekaStubsRegistrar.java @@ -1,20 +1,33 @@ package org.springframework.cloud.contract.stubrunner.spring.cloud.eureka; import java.lang.invoke.MethodHandles; +import java.net.InetAddress; import java.util.LinkedList; import java.util.List; import java.util.Map; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.springframework.beans.BeansException; +import org.springframework.cloud.client.serviceregistry.ServiceRegistry; import org.springframework.cloud.commons.util.InetUtils; import org.springframework.cloud.contract.stubrunner.StubConfiguration; import org.springframework.cloud.contract.stubrunner.StubRunning; import org.springframework.cloud.contract.stubrunner.spring.cloud.StubMapperProperties; import org.springframework.cloud.contract.stubrunner.spring.cloud.StubsRegistrar; +import org.springframework.cloud.netflix.eureka.CloudEurekaClient; +import org.springframework.cloud.netflix.eureka.EurekaClientConfigBean; import org.springframework.cloud.netflix.eureka.EurekaInstanceConfigBean; +import org.springframework.cloud.netflix.eureka.InstanceInfoFactory; +import org.springframework.cloud.netflix.eureka.serviceregistry.EurekaRegistration; +import org.springframework.context.ApplicationContext; import org.springframework.util.StringUtils; +import com.netflix.appinfo.ApplicationInfoManager; +import com.netflix.appinfo.InstanceInfo; +import com.netflix.discovery.AbstractDiscoveryClientOptionalArgs; +import com.netflix.discovery.EurekaClient; + /** * Registers all stubs in Eureka Service Discovery * @@ -27,39 +40,50 @@ public class EurekaStubsRegistrar implements StubsRegistrar { private static final Log log = LogFactory.getLog(MethodHandles.lookup().lookupClass()); private final StubRunning stubRunning; - private final Eureka eurekaClient; private final StubMapperProperties stubMapperProperties; private final InetUtils inetUtils; private final EurekaInstanceConfigBean eurekaInstanceConfigBean; - private final List discoveryList = new LinkedList<>(); + private final EurekaClientConfigBean eurekaClientConfigBean; + private final List registrations = new LinkedList<>(); + private final ServiceRegistry serviceRegistry; + private final ApplicationContext context; - public EurekaStubsRegistrar(StubRunning stubRunning, Eureka eureka, + public EurekaStubsRegistrar(StubRunning stubRunning, + ServiceRegistry serviceRegistry, StubMapperProperties stubMapperProperties, InetUtils inetUtils, - EurekaInstanceConfigBean eurekaInstanceConfigBean) { + EurekaInstanceConfigBean eurekaInstanceConfigBean, + EurekaClientConfigBean eurekaClientConfigBean, + ApplicationContext context) { this.stubRunning = stubRunning; this.stubMapperProperties = stubMapperProperties; - this.eurekaClient = eureka; + this.serviceRegistry = serviceRegistry; this.inetUtils = inetUtils; this.eurekaInstanceConfigBean = eurekaInstanceConfigBean; + this.eurekaClientConfigBean = eurekaClientConfigBean; + this.context = context; } @Override public void registerStubs() { Map activeStubs = this.stubRunning.runStubs() .validNamesAndPorts(); for (Map.Entry entry : activeStubs.entrySet()) { - Application application = new Application(name(entry.getKey()), entry.getKey().getArtifactId(), - StringUtils.hasText(hostName(entry)) ? - hostName(entry) : - this.inetUtils.findFirstNonLoopbackAddress().getHostName(), - port(entry)); + EurekaInstanceConfigBean instance = registration(entry); + log.info("Will register stub in Eureka " + "[" + instance.getAppname() + ", " + + instance.getHostname() + ", " + instance.getNonSecurePort() + ", " + + instance.getInstanceId() + "]"); + InstanceInfo instanceInfo = new InstanceInfoFactory().create(instance); + ApplicationInfoManager applicationInfoManager = new ApplicationInfoManager(instance, instanceInfo); + AbstractDiscoveryClientOptionalArgs args = args(); + EurekaClient client = new CloudEurekaClient(applicationInfoManager, this.eurekaClientConfigBean, args, this.context); + EurekaRegistration registration = EurekaRegistration.builder(instance) + .with(this.eurekaClientConfigBean, this.context) + .with(client) + .build(); + this.registrations.add(registration); try { - Registration register = this.eurekaClient.register(application); - this.discoveryList.add(new Renewer( - this.eurekaClient.clientConfig.getInstanceInfoReplicationIntervalSeconds() / 2, this.eurekaClient, register)); - if (log.isDebugEnabled()) { - log.debug("Successfully registered stub [" + entry.getKey().toColonSeparatedDependencyNotation() - + "] in Service Discovery"); - } + this.serviceRegistry.register(registration); + log.info("Successfully registered stub " + "[" + entry.getKey() + .toColonSeparatedDependencyNotation() + "] in Service Discovery"); } catch (Exception e) { log.warn("Exception occurred while trying to register a stub [" + entry.getKey().toColonSeparatedDependencyNotation() @@ -68,6 +92,33 @@ public class EurekaStubsRegistrar implements StubsRegistrar { } } + private AbstractDiscoveryClientOptionalArgs args() { + try { + return this.context + .getBean(AbstractDiscoveryClientOptionalArgs.class); + } catch (BeansException e) { + return null; + } + } + + private EurekaInstanceConfigBean registration(Map.Entry entry) { + EurekaInstanceConfigBean config = new EurekaInstanceConfigBean(this.inetUtils); + String appName = name(entry.getKey()); + config.setInstanceEnabledOnit(true); + InetAddress address = this.inetUtils.findFirstNonLoopbackAddress(); + config.setIpAddress(address.getHostAddress()); + config.setHostname(StringUtils.hasText(hostName(entry)) ? + hostName(entry) : address.getHostName()); + config.setAppname(appName); + config.setVirtualHostName(appName); + config.setSecureVirtualHostName(appName); + int port = port(entry); + config.setNonSecurePort(port); + config.setInstanceId(address.getHostAddress() + ":" + entry.getKey().getArtifactId() + ":" + port); + config.setLeaseRenewalIntervalInSeconds(1); + return config; + } + protected String hostName(Map.Entry entry) { return this.eurekaInstanceConfigBean.getHostname(); } @@ -87,9 +138,9 @@ public class EurekaStubsRegistrar implements StubsRegistrar { @Override public void close() throws Exception { - for (Renewer renewer : this.discoveryList) { - this.eurekaClient.shutdown(renewer.registration); - renewer.scheduler.shutdown(); + for (EurekaRegistration registration : this.registrations) { + this.serviceRegistry.deregister(registration); + registration.close(); } } } diff --git a/spring-cloud-contract-stub-runner/src/main/java/org/springframework/cloud/contract/stubrunner/spring/cloud/eureka/Registration.java b/spring-cloud-contract-stub-runner/src/main/java/org/springframework/cloud/contract/stubrunner/spring/cloud/eureka/Registration.java deleted file mode 100644 index 8e496d7b18..0000000000 --- a/spring-cloud-contract-stub-runner/src/main/java/org/springframework/cloud/contract/stubrunner/spring/cloud/eureka/Registration.java +++ /dev/null @@ -1,45 +0,0 @@ -package org.springframework.cloud.contract.stubrunner.spring.cloud.eureka; - -import com.netflix.appinfo.InstanceInfo; - -/** - * Taken from https://github.com/spencergibb/spring-cloud-netflix-eureka-lite - * - * @author Spencer Gibb - * - * @since 1.0.0 - */ -public class Registration { - private final InstanceInfo instanceInfo; - private final ApplicationStatus applicationStatus; - - public Registration(InstanceInfo instanceInfo, ApplicationStatus applicationStatus) { - this.instanceInfo = instanceInfo; - this.applicationStatus = applicationStatus; - } - - public Registration(InstanceInfo instanceInfo, Application application) { - this(instanceInfo, new ApplicationStatus(application, InstanceInfo.InstanceStatus.UP)); - } - - public String getRegistrationKey() { - return this.applicationStatus.getApplication().getRegistrationKey(); - } - - public String getApplicationName() { - return this.applicationStatus.getApplication().getName(); - } - - public InstanceInfo getInstanceInfo() { - return this.instanceInfo; - } - - public ApplicationStatus getApplicationStatus() { - return this.applicationStatus; - } - - @Override public String toString() { - return "Registration{" + "instanceInfo=" + this.instanceInfo + ", applicationStatus=" - + this.applicationStatus + '}'; - } -} diff --git a/spring-cloud-contract-stub-runner/src/main/java/org/springframework/cloud/contract/stubrunner/spring/cloud/eureka/StubRunnerSpringCloudEurekaAutoConfiguration.java b/spring-cloud-contract-stub-runner/src/main/java/org/springframework/cloud/contract/stubrunner/spring/cloud/eureka/StubRunnerSpringCloudEurekaAutoConfiguration.java index b900c5aadd..a610296bf1 100644 --- a/spring-cloud-contract-stub-runner/src/main/java/org/springframework/cloud/contract/stubrunner/spring/cloud/eureka/StubRunnerSpringCloudEurekaAutoConfiguration.java +++ b/spring-cloud-contract-stub-runner/src/main/java/org/springframework/cloud/contract/stubrunner/spring/cloud/eureka/StubRunnerSpringCloudEurekaAutoConfiguration.java @@ -18,8 +18,6 @@ package org.springframework.cloud.contract.stubrunner.spring.cloud.eureka; import java.util.Map; -import com.netflix.appinfo.ApplicationInfoManager; -import com.netflix.discovery.EurekaClientConfig; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -27,6 +25,7 @@ import org.springframework.boot.autoconfigure.AutoConfigureAfter; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.boot.bind.RelaxedPropertyResolver; +import org.springframework.cloud.client.serviceregistry.ServiceRegistry; import org.springframework.cloud.commons.util.InetUtils; import org.springframework.cloud.contract.stubrunner.StubConfiguration; import org.springframework.cloud.contract.stubrunner.StubRunning; @@ -38,6 +37,7 @@ import org.springframework.cloud.netflix.eureka.CloudEurekaClient; import org.springframework.cloud.netflix.eureka.EurekaClientAutoConfiguration; import org.springframework.cloud.netflix.eureka.EurekaClientConfigBean; import org.springframework.cloud.netflix.eureka.EurekaInstanceConfigBean; +import org.springframework.cloud.netflix.eureka.serviceregistry.EurekaRegistration; import org.springframework.context.ApplicationContext; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @@ -63,9 +63,12 @@ public class StubRunnerSpringCloudEurekaAutoConfiguration { @Configuration protected static class NonCloudConfig { @Bean(initMethod = "registerStubs") - public StubsRegistrar stubsRegistrar(StubRunning stubRunning, Eureka eureka, - StubMapperProperties stubMapperProperties, InetUtils inetUtils, EurekaInstanceConfigBean eurekaInstanceConfigBean) { - return new EurekaStubsRegistrar(stubRunning, eureka, stubMapperProperties, inetUtils, eurekaInstanceConfigBean); + public StubsRegistrar stubsRegistrar(StubRunning stubRunning, + ServiceRegistry serviceRegistry, ApplicationContext context, + StubMapperProperties stubMapperProperties, InetUtils inetUtils, + EurekaInstanceConfigBean eurekaInstanceConfigBean, EurekaClientConfigBean eurekaClientConfigBean) { + return new EurekaStubsRegistrar(stubRunning, serviceRegistry, stubMapperProperties, inetUtils, + eurekaInstanceConfigBean, eurekaClientConfigBean, context); } } @@ -78,11 +81,14 @@ public class StubRunnerSpringCloudEurekaAutoConfiguration { @Autowired Environment environment; @Bean(initMethod = "registerStubs") - public StubsRegistrar cloudStubsRegistrar(StubRunning stubRunning, Eureka eureka, - StubMapperProperties stubMapperProperties, InetUtils inetUtils, EurekaInstanceConfigBean eurekaInstanceConfigBean) { + public StubsRegistrar stubsRegistrar(StubRunning stubRunning, + ServiceRegistry serviceRegistry, ApplicationContext context, + StubMapperProperties stubMapperProperties, InetUtils inetUtils, + EurekaInstanceConfigBean eurekaInstanceConfigBean, EurekaClientConfigBean eurekaClientConfigBean) { final RelaxedPropertyResolver resolver = new RelaxedPropertyResolver( CloudConfig.this.environment); - return new EurekaStubsRegistrar(stubRunning, eureka, stubMapperProperties, inetUtils, eurekaInstanceConfigBean) { + return new EurekaStubsRegistrar(stubRunning, serviceRegistry, stubMapperProperties, inetUtils, + eurekaInstanceConfigBean, eurekaClientConfigBean, context) { @Override protected String hostName(Map.Entry entry) { String hostname = resolver.getProperty("application.hostname") + @@ -97,11 +103,4 @@ public class StubRunnerSpringCloudEurekaAutoConfiguration { }; } } - - @Bean(name = "eurekaRegistrar") - public Eureka eureka(InetUtils inetUtils, ApplicationInfoManager manager, - EurekaClientConfig config, ApplicationContext applicationContext, - EurekaClientConfigBean eurekaClientConfigBean) { - return new Eureka(inetUtils, eurekaClientConfigBean, new CloudEurekaClient(manager, config, applicationContext)); - } }