Merge branch '1.2.x'
This commit is contained in:
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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 + '}';
|
||||
}
|
||||
}
|
||||
@@ -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<EurekaRegistration> 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<EurekaRegistration> 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<StubConfiguration, Integer> 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));
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user