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 df6f3a2381..08fda3ec9c 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,14 +18,13 @@ 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; import org.springframework.boot.autoconfigure.AutoConfigureAfter; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +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; @@ -37,6 +36,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; @@ -62,9 +62,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); } } @@ -77,9 +80,12 @@ public class StubRunnerSpringCloudEurekaAutoConfiguration { @Autowired Environment environment; @Bean(initMethod = "registerStubs") - public StubsRegistrar cloudStubsRegistrar(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) { @Override protected String hostName(Map.Entry entry) { String hostname = CloudConfig.this.environment.getProperty("application.hostname") + @@ -94,11 +100,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)); - } }