From 03e630833592158df5f375cdec4a770e57ba015c Mon Sep 17 00:00:00 2001 From: Spencer Gibb Date: Thu, 2 Oct 2014 00:42:40 -0600 Subject: [PATCH] remove the list of serviceIds and add ServiceListInitializer --- .../cloud/client/ClientAutoConfiguration.java | 24 ---------- .../cloud/client/ClientProperties.java | 15 ------- .../archaius/ArchaiusAutoConfiguration.java | 2 +- .../ConfigurableEnvironmentConfiguration.java | 2 +- .../eureka/EurekaClientAutoConfiguration.java | 7 --- .../eureka/EurekaRibbonInitializer.java | 28 ------------ .../netflix/feign/FeignAutoConfiguration.java | 2 +- .../cloud/netflix/feign/FeignBase.java | 2 +- .../cloud/netflix/feign/FeignConfigurer.java | 7 ++- .../cloud/netflix/feign/SpringDecoder.java | 2 +- .../cloud/netflix/feign/SpringEncoder.java | 2 +- .../netflix/feign/SpringMvcContract.java | 2 +- .../cloud/netflix/hystrix/EnableHystrix.java | 2 +- .../netflix/hystrix/HystrixConfiguration.java | 2 +- .../hystrix/HystrixConfigurationSelector.java | 2 +- .../netflix/hystrix/HystrixConfigurer.java | 2 +- .../ribbon/RibbonAutoConfiguration.java | 6 --- .../ribbon/RibbonLoadBalancerClient.java | 5 +++ .../netflix/ribbon/ServerListInitializer.java | 8 ++++ .../eureka/EurekaRibbonInitializer.java | 24 ++++++++++ .../eureka/RibbonEurekaAutoConfiguration.java | 45 +++++++++++++++++++ .../cloud/netflix/zuul/Routes.java | 2 +- .../netflix/zuul/ZuulProxyProperties.java | 2 +- .../filters/route/RibbonRoutingFilter.java | 11 +++-- .../main/resources/META-INF/spring.factories | 2 +- .../eureka/server/EurekaController.java | 2 +- .../dashboard/EnableHystrixDashboard.java | 2 +- .../turbine/SpringAggregatorFactory.java | 2 +- .../netflix/turbine/SpringClusterMonitor.java | 2 +- .../netflix/turbine/TurbineConfiguration.java | 2 +- src/main/asciidoc/spring-cloud-netflix.adoc | 23 +--------- 31 files changed, 113 insertions(+), 128 deletions(-) delete mode 100644 spring-cloud-netflix-core/src/main/java/org/springframework/cloud/client/ClientAutoConfiguration.java delete mode 100644 spring-cloud-netflix-core/src/main/java/org/springframework/cloud/client/ClientProperties.java delete mode 100644 spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/eureka/EurekaRibbonInitializer.java create mode 100644 spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/ribbon/ServerListInitializer.java create mode 100644 spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/ribbon/eureka/EurekaRibbonInitializer.java create mode 100644 spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/ribbon/eureka/RibbonEurekaAutoConfiguration.java diff --git a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/client/ClientAutoConfiguration.java b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/client/ClientAutoConfiguration.java deleted file mode 100644 index 0265a7ba..00000000 --- a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/client/ClientAutoConfiguration.java +++ /dev/null @@ -1,24 +0,0 @@ -package org.springframework.cloud.client; - -import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression; -import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; -import org.springframework.boot.context.properties.EnableConfigurationProperties; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; - -/** - * @author Spencer Gibb - * TODO: move org.springframework.cloud.client to a spring-cloud-common project - */ -@Configuration -@EnableConfigurationProperties -@ConditionalOnExpression("${spring.cloud.client.enabled:true}") -public class ClientAutoConfiguration { - - @Bean - @ConditionalOnMissingBean(ClientProperties.class) - public ClientProperties clientProperties() { - return new ClientProperties(); - } - -} diff --git a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/client/ClientProperties.java b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/client/ClientProperties.java deleted file mode 100644 index bad73134..00000000 --- a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/client/ClientProperties.java +++ /dev/null @@ -1,15 +0,0 @@ -package org.springframework.cloud.client; - -import lombok.Data; -import org.springframework.boot.context.properties.ConfigurationProperties; - -import java.util.List; - -/** - * @author Spencer Gibb - */ -@Data -@ConfigurationProperties("spring.cloud.client") -public class ClientProperties { - private List serviceIds; -} diff --git a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/archaius/ArchaiusAutoConfiguration.java b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/archaius/ArchaiusAutoConfiguration.java index 65690663..f65cc5cf 100644 --- a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/archaius/ArchaiusAutoConfiguration.java +++ b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/archaius/ArchaiusAutoConfiguration.java @@ -20,7 +20,7 @@ import static com.netflix.config.ConfigurationManager.APPLICATION_PROPERTIES; import static com.netflix.config.ConfigurationManager.ENV_CONFIG_NAME; /** - * Created by sgibb on 7/3/14. + * @author Spencer Gibb */ @Configuration public class ArchaiusAutoConfiguration { diff --git a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/archaius/ConfigurableEnvironmentConfiguration.java b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/archaius/ConfigurableEnvironmentConfiguration.java index 44bbfdab..a8e07955 100644 --- a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/archaius/ConfigurableEnvironmentConfiguration.java +++ b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/archaius/ConfigurableEnvironmentConfiguration.java @@ -19,7 +19,7 @@ import org.springframework.core.env.StandardEnvironment; import org.springframework.util.ReflectionUtils; /** - * Created by sgibb on 6/27/14. + * @author Spencer Gibb */ public class ConfigurableEnvironmentConfiguration extends AbstractConfiguration { ConfigurableEnvironment environment; diff --git a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/eureka/EurekaClientAutoConfiguration.java b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/eureka/EurekaClientAutoConfiguration.java index 0126c7ec..58c44951 100644 --- a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/eureka/EurekaClientAutoConfiguration.java +++ b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/eureka/EurekaClientAutoConfiguration.java @@ -19,7 +19,6 @@ import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.boot.context.properties.EnableConfigurationProperties; -import org.springframework.cloud.client.ClientProperties; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @@ -47,10 +46,4 @@ public class EurekaClientAutoConfiguration { public EurekaInstanceConfigBean eurekaInstanceConfigBean() { return new EurekaInstanceConfigBean(); } - - @Bean - @ConditionalOnMissingBean(EurekaRibbonInitializer.class) - public EurekaRibbonInitializer eurekaRibbonInitializer(ClientProperties clientProperties) { - return new EurekaRibbonInitializer(clientProperties); - } } diff --git a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/eureka/EurekaRibbonInitializer.java b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/eureka/EurekaRibbonInitializer.java deleted file mode 100644 index 6ae141ae..00000000 --- a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/eureka/EurekaRibbonInitializer.java +++ /dev/null @@ -1,28 +0,0 @@ -package org.springframework.cloud.netflix.eureka; - -import com.netflix.config.ConfigurationManager; -import com.netflix.niws.loadbalancer.DiscoveryEnabledNIWSServerList; -import org.springframework.cloud.client.ClientProperties; - -/** - * @author Spencer Gibb - */ -public class EurekaRibbonInitializer { - - public EurekaRibbonInitializer(ClientProperties clientProperties) { - if (clientProperties.getServiceIds() != null) { - for (String serviceId : clientProperties.getServiceIds()) { - setServiceListClassAndVIP(serviceId); - } - } - } - - public static void setServiceListClassAndVIP(String serviceId) { - setProp(serviceId, "NIWSServerListClassName", DiscoveryEnabledNIWSServerList.class.getName()); - setProp(serviceId, "DeploymentContextBasedVipAddresses", serviceId); //FIXME: what should this be? - } - - private static void setProp(String serviceId, String suffix, String value) { - ConfigurationManager.getConfigInstance().setProperty(serviceId + ".ribbon." + suffix, value); - } -} diff --git a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/feign/FeignAutoConfiguration.java b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/feign/FeignAutoConfiguration.java index 20a7d645..c718b522 100644 --- a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/feign/FeignAutoConfiguration.java +++ b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/feign/FeignAutoConfiguration.java @@ -8,7 +8,7 @@ import org.springframework.context.annotation.Configuration; import org.springframework.cloud.netflix.archaius.ArchaiusAutoConfiguration; /** - * Created by sgibb on 7/3/14. + * @author Spencer Gibb */ @Configuration @AutoConfigureAfter(ArchaiusAutoConfiguration.class) diff --git a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/feign/FeignBase.java b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/feign/FeignBase.java index b2127587..de2b0eb3 100644 --- a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/feign/FeignBase.java +++ b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/feign/FeignBase.java @@ -22,7 +22,7 @@ import org.springframework.util.Assert; import org.springframework.util.ClassUtils; /** - * Created by sgibb on 6/27/14. + * @author Spencer Gibb */ public class FeignBase { public static final boolean romePresent = diff --git a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/feign/FeignConfigurer.java b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/feign/FeignConfigurer.java index 3cc25ca3..ffc89f43 100644 --- a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/feign/FeignConfigurer.java +++ b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/feign/FeignConfigurer.java @@ -7,19 +7,23 @@ import feign.codec.Decoder; import feign.codec.Encoder; import feign.ribbon.LoadBalancingTarget; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.cloud.netflix.ribbon.ServerListInitializer; import org.springframework.context.annotation.Configuration; import org.springframework.cloud.netflix.archaius.ConfigurableEnvironmentConfiguration; import java.net.URI; /** - * Created by sgibb on 7/3/14. + * @author Spencer Gibb */ @Configuration public class FeignConfigurer { @Autowired ConfigurableEnvironmentConfiguration envConfig; //FIXME: howto enforce this? + @Autowired + ServerListInitializer serverListInitializer; + @Autowired Decoder decoder; @@ -48,6 +52,7 @@ public class FeignConfigurer { protected T loadBalance(Feign.Builder builder, Class type, String schemeName) { String name = URI.create(schemeName).getHost(); + serverListInitializer.initialize(name); return builder.target(LoadBalancingTarget.create(type, schemeName)); } diff --git a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/feign/SpringDecoder.java b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/feign/SpringDecoder.java index bc876cb6..1c0df875 100644 --- a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/feign/SpringDecoder.java +++ b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/feign/SpringDecoder.java @@ -17,7 +17,7 @@ import feign.codec.DecodeException; import feign.codec.Decoder; /** - * Created by sgibb on 6/26/14. + * @author Spencer Gibb */ public class SpringDecoder extends FeignBase implements Decoder { diff --git a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/feign/SpringEncoder.java b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/feign/SpringEncoder.java index 387a6458..0508500b 100644 --- a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/feign/SpringEncoder.java +++ b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/feign/SpringEncoder.java @@ -20,7 +20,7 @@ import java.util.Collection; import java.util.List; /** - * Created by sgibb on 6/26/14. + * @author Spencer Gibb */ public class SpringEncoder extends FeignBase implements Encoder { private static final Logger logger = LoggerFactory.getLogger(SpringEncoder.class); diff --git a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/feign/SpringMvcContract.java b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/feign/SpringMvcContract.java index b653fbe5..232d6503 100644 --- a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/feign/SpringMvcContract.java +++ b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/feign/SpringMvcContract.java @@ -13,7 +13,7 @@ import feign.Contract; import feign.MethodMetadata; /** - * Created by sgibb on 6/27/14. + * @author Spencer Gibb */ public class SpringMvcContract extends Contract.BaseContract { static final String ACCEPT = "Accept"; 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 e65eeb80..d2c5a4db 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 @@ -7,7 +7,7 @@ import org.springframework.core.Ordered; import java.lang.annotation.*; /** - * Created by sgibb on 6/19/14. + * @author Spencer Gibb */ @Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) 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 8f9eeebb..32485d3c 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 @@ -28,7 +28,7 @@ import com.netflix.hystrix.contrib.metrics.eventstream.HystrixMetricsPoller; import com.netflix.hystrix.contrib.metrics.eventstream.HystrixMetricsPoller.MetricsAsJsonPollerListener; /** - * Created by sgibb on 6/19/14. + * @author Spencer Gibb */ @Configuration public class HystrixConfiguration implements ImportAware { diff --git a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/hystrix/HystrixConfigurationSelector.java b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/hystrix/HystrixConfigurationSelector.java index 92d5982c..85aa07ea 100644 --- a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/hystrix/HystrixConfigurationSelector.java +++ b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/hystrix/HystrixConfigurationSelector.java @@ -5,7 +5,7 @@ import org.springframework.context.annotation.AdviceModeImportSelector; import org.springframework.context.annotation.AutoProxyRegistrar; /** - * Created by sgibb on 6/19/14. + * @author Spencer Gibb */ public class HystrixConfigurationSelector extends AdviceModeImportSelector { /** diff --git a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/hystrix/HystrixConfigurer.java b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/hystrix/HystrixConfigurer.java index 1b890d34..51e2f8d3 100644 --- a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/hystrix/HystrixConfigurer.java +++ b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/hystrix/HystrixConfigurer.java @@ -1,7 +1,7 @@ package org.springframework.cloud.netflix.hystrix; /** - * Created by sgibb on 6/19/14. + * @author Spencer Gibb */ public interface HystrixConfigurer { } diff --git a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/ribbon/RibbonAutoConfiguration.java b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/ribbon/RibbonAutoConfiguration.java index a3889f98..7cb4c967 100644 --- a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/ribbon/RibbonAutoConfiguration.java +++ b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/ribbon/RibbonAutoConfiguration.java @@ -1,11 +1,9 @@ package org.springframework.cloud.netflix.ribbon; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.AutoConfigureAfter; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.cloud.client.loadbalancer.LoadBalancerClient; import org.springframework.cloud.netflix.eureka.EurekaClientAutoConfiguration; -import org.springframework.cloud.netflix.eureka.EurekaRibbonInitializer; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.http.client.ClientHttpRequestInterceptor; @@ -21,10 +19,6 @@ import java.util.List; @AutoConfigureAfter(EurekaClientAutoConfiguration.class) public class RibbonAutoConfiguration { - //TODO: why doesn't @AutoConfigureAfter(EurekaClientAutoConfiguration.class) do what the following does for order? - @Autowired - EurekaRibbonInitializer eurekaRibbonInitializer; - @Bean @ConditionalOnMissingBean(RestTemplate.class) public RestTemplate restTemplate(RibbonInterceptor ribbonInterceptor) { diff --git a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/ribbon/RibbonLoadBalancerClient.java b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/ribbon/RibbonLoadBalancerClient.java index 88aff43b..ba14090e 100644 --- a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/ribbon/RibbonLoadBalancerClient.java +++ b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/ribbon/RibbonLoadBalancerClient.java @@ -3,6 +3,7 @@ package org.springframework.cloud.netflix.ribbon; import com.netflix.client.ClientFactory; import com.netflix.loadbalancer.ILoadBalancer; import com.netflix.loadbalancer.Server; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.cloud.client.ServiceInstance; import org.springframework.cloud.client.loadbalancer.LoadBalancerClient; @@ -10,8 +11,12 @@ import org.springframework.cloud.client.loadbalancer.LoadBalancerClient; * @author Spencer Gibb */ public class RibbonLoadBalancerClient implements LoadBalancerClient { + @Autowired + private ServerListInitializer serverListInitializer; + @Override public ServiceInstance choose(String serviceId) { + serverListInitializer.initialize(serviceId); ILoadBalancer loadBalancer = ClientFactory.getNamedLoadBalancer(serviceId); Server server = loadBalancer.chooseServer(null); if (server == null) { diff --git a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/ribbon/ServerListInitializer.java b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/ribbon/ServerListInitializer.java new file mode 100644 index 00000000..7831c205 --- /dev/null +++ b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/ribbon/ServerListInitializer.java @@ -0,0 +1,8 @@ +package org.springframework.cloud.netflix.ribbon; + +/** + * @author Spencer Gibb + */ +public interface ServerListInitializer { + public void initialize(String serviceId); +} diff --git a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/ribbon/eureka/EurekaRibbonInitializer.java b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/ribbon/eureka/EurekaRibbonInitializer.java new file mode 100644 index 00000000..1801247c --- /dev/null +++ b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/ribbon/eureka/EurekaRibbonInitializer.java @@ -0,0 +1,24 @@ +package org.springframework.cloud.netflix.ribbon.eureka; + +import com.netflix.config.ConfigurationManager; +import com.netflix.niws.loadbalancer.DiscoveryEnabledNIWSServerList; +import org.springframework.cloud.netflix.ribbon.ServerListInitializer; + +/** + * @author Spencer Gibb + */ +public class EurekaRibbonInitializer implements ServerListInitializer { + + @Override + public void initialize(String serviceId) { + //TODO: should this look more like hibernate spring boot props? + setProp(serviceId, "NIWSServerListClassName", DiscoveryEnabledNIWSServerList.class.getName()); + setProp(serviceId, "DeploymentContextBasedVipAddresses", serviceId); //FIXME: what should this be? + } + + protected void setProp(String serviceId, String suffix, String value) { + //how to set the namespace properly? + String namespace = "ribbon"; + ConfigurationManager.getConfigInstance().setProperty(serviceId + "."+ namespace +"." + suffix, value); + } +} diff --git a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/ribbon/eureka/RibbonEurekaAutoConfiguration.java b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/ribbon/eureka/RibbonEurekaAutoConfiguration.java new file mode 100644 index 00000000..7ae22dc6 --- /dev/null +++ b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/ribbon/eureka/RibbonEurekaAutoConfiguration.java @@ -0,0 +1,45 @@ +/* + * Copyright 2013-2014 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.springframework.cloud.netflix.ribbon.eureka; + +import com.netflix.niws.loadbalancer.DiscoveryEnabledNIWSServerList; +import org.springframework.boot.autoconfigure.AutoConfigureBefore; +import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; +import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression; +import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; +import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.cloud.netflix.ribbon.RibbonAutoConfiguration; +import org.springframework.cloud.netflix.ribbon.ServerListInitializer; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + * @author Dave Syer + * + */ +@Configuration +@EnableConfigurationProperties +@ConditionalOnClass(DiscoveryEnabledNIWSServerList.class) +@ConditionalOnExpression("${ribbon.eureka.enabled:true}") +@AutoConfigureBefore(RibbonAutoConfiguration.class) +public class RibbonEurekaAutoConfiguration { + + @Bean + @ConditionalOnMissingBean(ServerListInitializer.class) + public ServerListInitializer serverListInitializer() { + return new EurekaRibbonInitializer(); + } +} diff --git a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/Routes.java b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/Routes.java index 13095ad3..430f66d4 100644 --- a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/Routes.java +++ b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/Routes.java @@ -13,7 +13,7 @@ import java.util.Map; import java.util.Set; /** - * Created by sgibb on 7/10/14. + * @author Spencer Gibb */ public class Routes { private static final Logger logger = LoggerFactory.getLogger(Routes.class); diff --git a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/ZuulProxyProperties.java b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/ZuulProxyProperties.java index f7cfc06d..eb6fba67 100644 --- a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/ZuulProxyProperties.java +++ b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/ZuulProxyProperties.java @@ -4,7 +4,7 @@ import lombok.Data; import org.springframework.boot.context.properties.ConfigurationProperties; /** - * Created by sgibb on 8/5/14. + * @author Spencer Gibb */ @Data @ConfigurationProperties("zuul.proxy") diff --git a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/filters/route/RibbonRoutingFilter.java b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/filters/route/RibbonRoutingFilter.java index f8cd7b8a..ab452ddc 100644 --- a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/filters/route/RibbonRoutingFilter.java +++ b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/filters/route/RibbonRoutingFilter.java @@ -1,7 +1,5 @@ package org.springframework.cloud.netflix.zuul.filters.route; -import static org.springframework.cloud.netflix.eureka.EurekaRibbonInitializer.setServiceListClassAndVIP; - import java.io.IOException; import java.io.InputStream; import java.util.Collection; @@ -18,7 +16,9 @@ import org.apache.commons.io.IOUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.boot.actuate.trace.TraceRepository; +import org.springframework.cloud.netflix.ribbon.ServerListInitializer; import org.springframework.cloud.netflix.zuul.RibbonCommand; +import org.springframework.cloud.netflix.zuul.SpringFilter; import org.springframework.util.StringUtils; import com.netflix.client.ClientException; @@ -27,13 +27,12 @@ import com.netflix.client.http.HttpRequest.Verb; import com.netflix.client.http.HttpResponse; import com.netflix.hystrix.exception.HystrixRuntimeException; import com.netflix.niws.client.http.RestClient; -import com.netflix.zuul.ZuulFilter; import com.netflix.zuul.context.RequestContext; import com.netflix.zuul.exception.ZuulException; import com.netflix.zuul.util.HTTPRequestUtils; import com.sun.jersey.core.util.MultivaluedMapImpl; -public class RibbonRoutingFilter extends ZuulFilter { +public class RibbonRoutingFilter extends SpringFilter { private static final Logger LOG = LoggerFactory.getLogger(RibbonRoutingFilter.class); @@ -72,8 +71,8 @@ public class RibbonRoutingFilter extends ZuulFilter { String serviceId = (String) context.get("serviceId"); - // TODO: can this be set be default? or an implementation of an interface? - setServiceListClassAndVIP(serviceId); + //TODO: should this be an interface or just config? + getBean(ServerListInitializer.class).initialize(serviceId); RestClient restClient = (RestClient) ClientFactory.getNamedClient(serviceId); 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 73804c3e..f57ea6c3 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 @@ -1,7 +1,7 @@ org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ -org.springframework.cloud.client.ClientAutoConfiguration,\ org.springframework.cloud.netflix.archaius.ArchaiusAutoConfiguration,\ org.springframework.cloud.netflix.feign.FeignAutoConfiguration,\ org.springframework.cloud.netflix.eureka.EurekaClientAutoConfiguration,\ org.springframework.cloud.netflix.ribbon.RibbonAutoConfiguration,\ +org.springframework.cloud.netflix.ribbon.eureka.RibbonEurekaAutoConfiguration,\ org.springframework.cloud.netflix.servo.ServoMetricsAutoConfiguration \ No newline at end of file diff --git a/spring-cloud-netflix-eureka-server/src/main/java/org/springframework/cloud/netflix/eureka/server/EurekaController.java b/spring-cloud-netflix-eureka-server/src/main/java/org/springframework/cloud/netflix/eureka/server/EurekaController.java index b4911efe..654a6aaa 100644 --- a/spring-cloud-netflix-eureka-server/src/main/java/org/springframework/cloud/netflix/eureka/server/EurekaController.java +++ b/spring-cloud-netflix-eureka-server/src/main/java/org/springframework/cloud/netflix/eureka/server/EurekaController.java @@ -20,7 +20,7 @@ import java.net.URI; import java.util.*; /** - * Created by sgibb on 7/29/14. + * @author Spencer Gibb */ @Controller public class EurekaController { diff --git a/spring-cloud-netflix-hystrix-dashboard/src/main/java/org/springframework/cloud/netflix/hystrix/dashboard/EnableHystrixDashboard.java b/spring-cloud-netflix-hystrix-dashboard/src/main/java/org/springframework/cloud/netflix/hystrix/dashboard/EnableHystrixDashboard.java index e70fc3ba..bf495cf0 100644 --- a/spring-cloud-netflix-hystrix-dashboard/src/main/java/org/springframework/cloud/netflix/hystrix/dashboard/EnableHystrixDashboard.java +++ b/spring-cloud-netflix-hystrix-dashboard/src/main/java/org/springframework/cloud/netflix/hystrix/dashboard/EnableHystrixDashboard.java @@ -9,7 +9,7 @@ import java.lang.annotation.Target; import org.springframework.context.annotation.Import; /** - * Created by sgibb on 6/19/14. + * @author Spencer Gibb */ @Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) diff --git a/spring-cloud-netflix-turbine/src/main/java/org/springframework/cloud/netflix/turbine/SpringAggregatorFactory.java b/spring-cloud-netflix-turbine/src/main/java/org/springframework/cloud/netflix/turbine/SpringAggregatorFactory.java index 8b1cf8ed..b028bb1d 100644 --- a/spring-cloud-netflix-turbine/src/main/java/org/springframework/cloud/netflix/turbine/SpringAggregatorFactory.java +++ b/spring-cloud-netflix-turbine/src/main/java/org/springframework/cloud/netflix/turbine/SpringAggregatorFactory.java @@ -20,7 +20,7 @@ import java.util.List; import static com.netflix.turbine.monitor.cluster.AggregateClusterMonitor.AggregatorClusterMonitorConsole; /** - * Created by sgibb on 7/14/14. + * @author Spencer Gibb */ public class SpringAggregatorFactory implements ClusterMonitorFactory { private static final Logger logger = LoggerFactory.getLogger(SpringAggregatorFactory.class); diff --git a/spring-cloud-netflix-turbine/src/main/java/org/springframework/cloud/netflix/turbine/SpringClusterMonitor.java b/spring-cloud-netflix-turbine/src/main/java/org/springframework/cloud/netflix/turbine/SpringClusterMonitor.java index 1dfd665c..eb864190 100644 --- a/spring-cloud-netflix-turbine/src/main/java/org/springframework/cloud/netflix/turbine/SpringClusterMonitor.java +++ b/spring-cloud-netflix-turbine/src/main/java/org/springframework/cloud/netflix/turbine/SpringClusterMonitor.java @@ -12,7 +12,7 @@ import com.netflix.turbine.monitor.cluster.ObservationCriteria; import com.netflix.turbine.monitor.instance.InstanceUrlClosure; /** - * Created by sgibb on 7/14/14. + * @author Spencer Gibb * TODO: convert to ConfigurationProperties (how to do per-cluster configuration?) */ public class SpringClusterMonitor extends AggregateClusterMonitor { diff --git a/spring-cloud-netflix-turbine/src/main/java/org/springframework/cloud/netflix/turbine/TurbineConfiguration.java b/spring-cloud-netflix-turbine/src/main/java/org/springframework/cloud/netflix/turbine/TurbineConfiguration.java index c94e8eee..1c535f80 100644 --- a/spring-cloud-netflix-turbine/src/main/java/org/springframework/cloud/netflix/turbine/TurbineConfiguration.java +++ b/spring-cloud-netflix-turbine/src/main/java/org/springframework/cloud/netflix/turbine/TurbineConfiguration.java @@ -12,7 +12,7 @@ import org.springframework.context.annotation.Configuration; import org.springframework.core.Ordered; /** - * Created by sgibb on 7/11/14. + * @author Spencer Gibb */ @Configuration @EnableEurekaClient diff --git a/src/main/asciidoc/spring-cloud-netflix.adoc b/src/main/asciidoc/spring-cloud-netflix.adoc index 21b08a88..a30365d2 100644 --- a/src/main/asciidoc/spring-cloud-netflix.adoc +++ b/src/main/asciidoc/spring-cloud-netflix.adoc @@ -99,16 +99,6 @@ public class StoreIntegration { == Declarative REST Client: Feign -Example application.yml: - -``` -spring: - cloud: - client: - serviceIds: - - stores -``` - Example spring boot app ``` @Configuration @@ -142,16 +132,6 @@ public interface StoreClient { == Client Side Load Balancer: Ribbon -Example application.yml: - -``` -spring: - cloud: - client: - serviceIds: - - stores -``` - Usage of `LoadBalancerClient` directly: ``` @@ -160,7 +140,6 @@ public class MyClass { private LoadBalancerClient loadBalancer; public void doStuff() { - //"stores" in choose() must match a service in spring.cloud.client.serviceIds ServiceInstance instance = loadBalancer.choose("stores"); URI storesUri = URI.create(String.format("http://%s:%s", instance.getHost(), instance.getPort())); // ... do something with the URI @@ -168,7 +147,7 @@ public class MyClass { } ``` -Indirect usage via `RestTemplate`. Notice the `stores` hostname part, must match a service id in spring.cloud.client.serviceIds: +Indirect usage via `RestTemplate`. ``` public class MyClass {