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
This commit is contained in:
Marcin Grzejszczak
2017-12-22 12:23:09 +01:00
parent 3054b3e8a4
commit b3e6159bbb
5 changed files with 85 additions and 440 deletions

View File

@@ -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;
}
}

View File

@@ -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.<ClientFilter>emptyList());
EurekaTransportConfig transportConfig = this.clientConfig.getTransportConfig();
ClosableResolver<AwsEndpoint> 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<ClientFilter> 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<InstanceInfo> 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<Void> 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<Void> 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);
}
}

View File

@@ -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<Renewer> discoveryList = new LinkedList<>();
private final EurekaClientConfigBean eurekaClientConfigBean;
private final List<EurekaRegistration> registrations = new LinkedList<>();
private final ServiceRegistry<EurekaRegistration> serviceRegistry;
private final ApplicationContext context;
public EurekaStubsRegistrar(StubRunning stubRunning, Eureka eureka,
public EurekaStubsRegistrar(StubRunning stubRunning,
ServiceRegistry<EurekaRegistration> 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<StubConfiguration, Integer> activeStubs = this.stubRunning.runStubs()
.validNamesAndPorts();
for (Map.Entry<StubConfiguration, Integer> 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<StubConfiguration, Integer> 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<StubConfiguration, Integer> 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();
}
}
}

View File

@@ -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 + '}';
}
}

View File

@@ -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<EurekaRegistration> 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<EurekaRegistration> 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<StubConfiguration, Integer> 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));
}
}