diff --git a/pom.xml b/pom.xml index ce7c0ee47..f6cdb1876 100644 --- a/pom.xml +++ b/pom.xml @@ -36,6 +36,11 @@ + + org.springframework.cloud + spring-cloud-commons + 1.0.0.BUILD-SNAPSHOT + org.springframework.cloud spring-cloud-config-client diff --git a/spring-cloud-netflix-core/pom.xml b/spring-cloud-netflix-core/pom.xml index 1f9320253..66cc419c0 100644 --- a/spring-cloud-netflix-core/pom.xml +++ b/spring-cloud-netflix-core/pom.xml @@ -24,6 +24,11 @@ org.springframework.boot spring-boot-starter-actuator + + org.springframework.cloud + spring-cloud-commons + true + org.springframework.cloud spring-cloud-config-client diff --git a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/client/ServiceInstance.java b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/client/ServiceInstance.java deleted file mode 100644 index 2480f2a30..000000000 --- a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/client/ServiceInstance.java +++ /dev/null @@ -1,12 +0,0 @@ -package org.springframework.cloud.client; - - -/** - * @author Spencer Gibb - * TODO: name? Server? HostAndPort? Instance? - */ -public interface ServiceInstance { - public String getServiceId(); - public String getHost(); - public int getPort(); -} diff --git a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/client/discovery/DiscoveryClient.java b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/client/discovery/DiscoveryClient.java deleted file mode 100644 index 084f6f70c..000000000 --- a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/client/discovery/DiscoveryClient.java +++ /dev/null @@ -1,19 +0,0 @@ -package org.springframework.cloud.client.discovery; - -import org.springframework.cloud.client.ServiceInstance; - -import java.util.List; - -/** - * @author Spencer Gibb - */ -public interface DiscoveryClient { - /** - * @return ServiceInstance with information used to register the local service - */ - public ServiceInstance getLocalServiceInstance(); - - public List getInstances(String serviceId); - - public List getServices(); -} diff --git a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/client/discovery/EnableDiscoveryClient.java b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/client/discovery/EnableDiscoveryClient.java deleted file mode 100644 index f72323edd..000000000 --- a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/client/discovery/EnableDiscoveryClient.java +++ /dev/null @@ -1,17 +0,0 @@ -package org.springframework.cloud.client.discovery; - -/** - * @author Spencer Gibb - */ - -import org.springframework.context.annotation.Import; - -import java.lang.annotation.*; - -@Target(ElementType.TYPE) -@Retention(RetentionPolicy.RUNTIME) -@Documented -@Inherited -@Import(EnableDiscoveryClientImportSelector.class) -public @interface EnableDiscoveryClient { -} diff --git a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/client/discovery/EnableDiscoveryClientImportSelector.java b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/client/discovery/EnableDiscoveryClientImportSelector.java deleted file mode 100644 index d580a7a30..000000000 --- a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/client/discovery/EnableDiscoveryClientImportSelector.java +++ /dev/null @@ -1,59 +0,0 @@ -package org.springframework.cloud.client.discovery; - -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.BeanClassLoaderAware; -import org.springframework.context.annotation.DeferredImportSelector; -import org.springframework.core.Ordered; -import org.springframework.core.annotation.AnnotationAttributes; -import org.springframework.core.annotation.Order; -import org.springframework.core.io.support.SpringFactoriesLoader; -import org.springframework.core.type.AnnotationMetadata; -import org.springframework.util.Assert; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.LinkedHashSet; -import java.util.List; - -/** - * @author Spencer Gibb - */ -@Order(Ordered.LOWEST_PRECEDENCE - 100) -@Slf4j -public class EnableDiscoveryClientImportSelector implements DeferredImportSelector, - BeanClassLoaderAware { - - private ClassLoader beanClassLoader; - - @Override - public String[] selectImports(AnnotationMetadata metadata) { - AnnotationAttributes attributes = AnnotationAttributes.fromMap(metadata - .getAnnotationAttributes(EnableDiscoveryClient.class.getName(), - true)); - - Assert.notNull(attributes, "No EnableDiscoveryClient attributes found. Is " - + metadata.getClassName() - + " annotated with @EnableDiscoveryClient?"); - - // Find all possible auto configuration classes, filtering duplicates - List factories = new ArrayList<>(new LinkedHashSet<>( - SpringFactoriesLoader.loadFactoryNames(EnableDiscoveryClient.class, - this.beanClassLoader))); - - if (factories.size() > 1) { - String factory = factories.get(0); - //there should only every be one DiscoveryClient - log.warn("More than one implementation of @EnableDiscoveryClient. Using {} out of available {}", factory, factories); - factories = Collections.singletonList(factory); - } - - return factories.toArray(new String[factories.size()]); - - } - - @Override - public void setBeanClassLoader(ClassLoader classLoader) { - this.beanClassLoader = classLoader; - } - -} diff --git a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/client/discovery/InstanceRegisteredEvent.java b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/client/discovery/InstanceRegisteredEvent.java deleted file mode 100644 index e9dd46eb5..000000000 --- a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/client/discovery/InstanceRegisteredEvent.java +++ /dev/null @@ -1,24 +0,0 @@ -package org.springframework.cloud.client.discovery; - -import org.springframework.context.ApplicationEvent; - -/** - * @author Spencer Gibb - */ -public class InstanceRegisteredEvent extends ApplicationEvent { - private Object config; - - /** - * Create a new ApplicationEvent. - * - * @param source the component that published the event (never {@code null}) - */ - public InstanceRegisteredEvent(Object source, Object config) { - super(source); - this.config = config; - } - - public Object getConfig() { - return config; - } -} diff --git a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/client/loadbalancer/LoadBalancerClient.java b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/client/loadbalancer/LoadBalancerClient.java deleted file mode 100644 index d579f121f..000000000 --- a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/client/loadbalancer/LoadBalancerClient.java +++ /dev/null @@ -1,27 +0,0 @@ -package org.springframework.cloud.client.loadbalancer; - -import org.springframework.cloud.client.ServiceInstance; - -import java.net.URI; - -/** - * @author Spencer Gibb - */ -public interface LoadBalancerClient { - /** - * Choose a {@see ServiceInstance} from the LoadBalancer for the specified service - * @param serviceId the service id to look up the LoadBalancer - * @return a ServiceInstance that matches the serviceId - */ - public ServiceInstance choose(String serviceId); - - /** - * Choose a {@see ServiceInstance} from the LoadBalancer for the specified service - * @param serviceId the service id to look up the LoadBalancer - * @param request allows implementations to execute pre and post actions such as incrementing metrics - * @return the result of the LoadBalancerRequest callback on the selected ServiceInstance - */ - public T execute(String serviceId, LoadBalancerRequest request); - - public URI reconstructURI(ServiceInstance instance, URI original); -} diff --git a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/client/loadbalancer/LoadBalancerRequest.java b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/client/loadbalancer/LoadBalancerRequest.java deleted file mode 100644 index 7c6cbc609..000000000 --- a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/client/loadbalancer/LoadBalancerRequest.java +++ /dev/null @@ -1,10 +0,0 @@ -package org.springframework.cloud.client.loadbalancer; - -import org.springframework.cloud.client.ServiceInstance; - -/** - * @author Spencer Gibb - */ -public interface LoadBalancerRequest { - public T apply(ServiceInstance instance) throws Exception; -} diff --git a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/eureka/EurekaDiscoveryClient.java b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/eureka/EurekaDiscoveryClient.java index c4508f632..3f70dfb4e 100644 --- a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/eureka/EurekaDiscoveryClient.java +++ b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/eureka/EurekaDiscoveryClient.java @@ -96,4 +96,24 @@ public class EurekaDiscoveryClient implements DiscoveryClient { } })); } + + @Override + public List getAllInstances() { + Applications applications = discovery.getApplications(); + if (applications == null) { + return Collections.emptyList(); + } + Iterable instances = transform(concat(transform(applications.getRegisteredApplications(), new Function>() { + public List apply(@Nullable Application app) { + return app.getInstances(); + } + })), new Function() { + @Nullable + @Override + public ServiceInstance apply(@Nullable InstanceInfo info) { + return new EurekaServiceInstance(info); + } + }); + return Lists.newArrayList(instances); + } } diff --git a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/hystrix/EnableHystrix.java b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/hystrix/EnableHystrix.java index 6c26a52c9..144e3d7ba 100644 --- a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/hystrix/EnableHystrix.java +++ b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/hystrix/EnableHystrix.java @@ -26,5 +26,6 @@ import java.lang.annotation.*; @Retention(RetentionPolicy.RUNTIME) @Documented @Import(HystrixConfiguration.class) +@Deprecated public @interface EnableHystrix { } \ No newline at end of file diff --git a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/hystrix/HystrixConfiguration.java b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/hystrix/HystrixConfiguration.java index fc65130b5..6a2daa523 100644 --- a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/hystrix/HystrixConfiguration.java +++ b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/hystrix/HystrixConfiguration.java @@ -16,12 +16,11 @@ package org.springframework.cloud.netflix.hystrix; -import java.io.IOException; -import java.util.Arrays; -import java.util.HashSet; -import java.util.Map; -import java.util.Set; - +import com.fasterxml.jackson.databind.ObjectMapper; +import com.netflix.hystrix.Hystrix; +import com.netflix.hystrix.contrib.javanica.aop.aspectj.HystrixCommandAspect; +import com.netflix.hystrix.contrib.metrics.eventstream.HystrixMetricsPoller; +import com.netflix.hystrix.contrib.metrics.eventstream.HystrixMetricsPoller.MetricsAsJsonPollerListener; import org.apache.catalina.core.ApplicationContext; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -34,26 +33,20 @@ import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplicat import org.springframework.context.SmartLifecycle; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; -import org.springframework.context.annotation.ImportAware; import org.springframework.core.Ordered; -import org.springframework.core.annotation.AnnotationAttributes; -import org.springframework.core.type.AnnotationMetadata; -import org.springframework.util.Assert; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.netflix.hystrix.Hystrix; -import com.netflix.hystrix.contrib.javanica.aop.aspectj.HystrixCommandAspect; -import com.netflix.hystrix.contrib.metrics.eventstream.HystrixMetricsPoller; -import com.netflix.hystrix.contrib.metrics.eventstream.HystrixMetricsPoller.MetricsAsJsonPollerListener; +import java.io.IOException; +import java.util.Arrays; +import java.util.HashSet; +import java.util.Map; +import java.util.Set; /** * @author Spencer Gibb * @author Christian Dupuis */ @Configuration -public class HystrixConfiguration implements ImportAware { - - private AnnotationAttributes enableHystrix; +public class HystrixConfiguration { @Bean public HystrixCommandAspect hystrixCommandAspect() { @@ -77,16 +70,6 @@ public class HystrixConfiguration implements ImportAware { } - @Override - public void setImportMetadata(AnnotationMetadata importMetadata) { - this.enableHystrix = AnnotationAttributes.fromMap(importMetadata - .getAnnotationAttributes(EnableHystrix.class.getName(), false)); - Assert.notNull( - this.enableHystrix, - "@EnableHystrix is not present on importing class " - + importMetadata.getClassName()); - } - @Configuration @ConditionalOnClass(GaugeService.class) protected static class HystrixMetricsPollerConfiguration implements SmartLifecycle { diff --git a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/EnableZuulProxy.java b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/EnableZuulProxy.java index b0e095a45..fe85b4bcf 100644 --- a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/EnableZuulProxy.java +++ b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/EnableZuulProxy.java @@ -1,16 +1,19 @@ package org.springframework.cloud.netflix.zuul; -import java.lang.annotation.*; - +import org.springframework.cloud.client.circuitbreaker.EnableCircuitBreaker; +import org.springframework.cloud.client.discovery.EnableDiscoveryClient; import org.springframework.context.annotation.Import; -import org.springframework.cloud.netflix.eureka.EnableEurekaClient; -import org.springframework.cloud.netflix.hystrix.EnableHystrix; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; /** * @author Spencer Gibb */ -@EnableHystrix -@EnableEurekaClient +@EnableCircuitBreaker +@EnableDiscoveryClient @Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) @Import(ZuulConfiguration.class) diff --git a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/EnableZuulServer.java b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/EnableZuulServer.java index f4a1f3614..fdb6b80ba 100644 --- a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/EnableZuulServer.java +++ b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/EnableZuulServer.java @@ -1,7 +1,7 @@ package org.springframework.cloud.netflix.zuul; -import org.springframework.cloud.netflix.eureka.EnableEurekaClient; -import org.springframework.cloud.netflix.hystrix.EnableHystrix; +import org.springframework.cloud.client.circuitbreaker.EnableCircuitBreaker; +import org.springframework.cloud.client.discovery.EnableDiscoveryClient; import org.springframework.context.annotation.Import; import java.lang.annotation.*; @@ -10,8 +10,8 @@ import java.lang.annotation.*; * @author Spencer Gibb * @deprecated @see org.springframework.cloud.netflix.zuul.EnableZuulProxy */ -@EnableHystrix -@EnableEurekaClient +@EnableCircuitBreaker +@EnableDiscoveryClient @Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) @Documented diff --git a/spring-cloud-netflix-core/src/main/resources/META-INF/spring.factories b/spring-cloud-netflix-core/src/main/resources/META-INF/spring.factories index 1fb9c4e8a..9a8405f3d 100644 --- a/spring-cloud-netflix-core/src/main/resources/META-INF/spring.factories +++ b/spring-cloud-netflix-core/src/main/resources/META-INF/spring.factories @@ -12,4 +12,7 @@ org.springframework.cloud.bootstrap.BootstrapConfiguration=\ org.springframework.cloud.netflix.config.DiscoveryClientConfigServiceBootstrapConfiguration org.springframework.cloud.client.discovery.EnableDiscoveryClient=\ -org.springframework.cloud.netflix.eureka.EurekaClientConfiguration \ No newline at end of file +org.springframework.cloud.netflix.eureka.EurekaClientConfiguration + +org.springframework.cloud.client.circuitbreaker.EnableCircuitBreaker=\ +org.springframework.cloud.netflix.hystrix.HystrixConfiguration \ No newline at end of file diff --git a/spring-cloud-netflix-eureka-server/pom.xml b/spring-cloud-netflix-eureka-server/pom.xml index 8552cbdb6..7f98f9835 100644 --- a/spring-cloud-netflix-eureka-server/pom.xml +++ b/spring-cloud-netflix-eureka-server/pom.xml @@ -42,6 +42,10 @@ + + org.springframework.cloud + spring-cloud-commons + org.springframework.cloud spring-cloud-netflix-core diff --git a/spring-cloud-netflix-hystrix-dashboard/pom.xml b/spring-cloud-netflix-hystrix-dashboard/pom.xml index fa990f665..eb7b71098 100644 --- a/spring-cloud-netflix-hystrix-dashboard/pom.xml +++ b/spring-cloud-netflix-hystrix-dashboard/pom.xml @@ -24,6 +24,10 @@ org.springframework.boot spring-boot-starter-freemarker + + org.springframework.cloud + spring-cloud-commons + org.springframework.cloud spring-cloud-netflix-core diff --git a/spring-cloud-netflix-sidecar/pom.xml b/spring-cloud-netflix-sidecar/pom.xml index 8ed7203e4..0340f4dd3 100644 --- a/spring-cloud-netflix-sidecar/pom.xml +++ b/spring-cloud-netflix-sidecar/pom.xml @@ -22,6 +22,10 @@ + + org.springframework.cloud + spring-cloud-commons + org.springframework.cloud spring-cloud-netflix-core diff --git a/spring-cloud-netflix-sidecar/src/main/java/org/springframework/cloud/netflix/sidecar/EnableSidecar.java b/spring-cloud-netflix-sidecar/src/main/java/org/springframework/cloud/netflix/sidecar/EnableSidecar.java index a44008080..42df7f36e 100644 --- a/spring-cloud-netflix-sidecar/src/main/java/org/springframework/cloud/netflix/sidecar/EnableSidecar.java +++ b/spring-cloud-netflix-sidecar/src/main/java/org/springframework/cloud/netflix/sidecar/EnableSidecar.java @@ -1,7 +1,7 @@ package org.springframework.cloud.netflix.sidecar; -import org.springframework.cloud.netflix.eureka.EnableEurekaClient; -import org.springframework.cloud.netflix.hystrix.EnableHystrix; +import org.springframework.cloud.client.circuitbreaker.EnableCircuitBreaker; +import org.springframework.cloud.client.discovery.EnableDiscoveryClient; import org.springframework.cloud.netflix.zuul.EnableZuulProxy; import org.springframework.context.annotation.Import; @@ -10,8 +10,8 @@ import java.lang.annotation.*; /** * @author Spencer Gibb */ -@EnableHystrix -@EnableEurekaClient +@EnableCircuitBreaker +@EnableDiscoveryClient @EnableZuulProxy @Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) diff --git a/spring-cloud-netflix-turbine/pom.xml b/spring-cloud-netflix-turbine/pom.xml index d2d8351bf..f2ea0ece4 100644 --- a/spring-cloud-netflix-turbine/pom.xml +++ b/spring-cloud-netflix-turbine/pom.xml @@ -22,6 +22,10 @@ + + org.springframework.cloud + spring-cloud-commons + org.springframework.cloud spring-cloud-netflix-core