diff --git a/pom.xml b/pom.xml index f77904fa..19c89ee0 100644 --- a/pom.xml +++ b/pom.xml @@ -186,20 +186,9 @@ com.netflix.feign - feign-ribbon + feign-core ${feign.version} - - com.netflix.feign - feign-slf4j - ${feign.version} - - - org.projectlombok - lombok - 1.12.6 - provided - org.spockframework @@ -237,19 +226,15 @@ 2.4.4 test - - com.netflix.feign - feign-core - ${feign.version} - 1.1.0.BUILD-SNAPSHOT 1.1.0.BUILD-SNAPSHOT - 0.7.1 2.8.0 + + 0.7.1 2.1.0 8.10.0 1.0-groovy-2.4 diff --git a/spring-cloud-zookeeper-discovery/pom.xml b/spring-cloud-zookeeper-discovery/pom.xml index ce44a7f0..b56258c6 100644 --- a/spring-cloud-zookeeper-discovery/pom.xml +++ b/spring-cloud-zookeeper-discovery/pom.xml @@ -107,16 +107,6 @@ feign-core true - - com.netflix.feign - feign-ribbon - true - - - com.netflix.feign - feign-slf4j - true - org.projectlombok lombok @@ -169,6 +159,12 @@ groovy-all test + + org.springframework.cloud + spring-cloud-starter-feign + ${spring-cloud-netflix.version} + test + com.github.tomakehurst wiremock diff --git a/spring-cloud-zookeeper-discovery/src/main/java/org/springframework/cloud/zookeeper/discovery/dependency/DependencyFeignClientAutoConfiguration.java b/spring-cloud-zookeeper-discovery/src/main/java/org/springframework/cloud/zookeeper/discovery/dependency/DependencyFeignClientAutoConfiguration.java index 9a0e7e8e..c35e3c82 100644 --- a/spring-cloud-zookeeper-discovery/src/main/java/org/springframework/cloud/zookeeper/discovery/dependency/DependencyFeignClientAutoConfiguration.java +++ b/spring-cloud-zookeeper-discovery/src/main/java/org/springframework/cloud/zookeeper/discovery/dependency/DependencyFeignClientAutoConfiguration.java @@ -23,8 +23,10 @@ import java.util.Collections; import java.util.HashMap; import java.util.Map; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.cloud.netflix.feign.ribbon.CachingSpringLoadBalancerFactory; import org.springframework.cloud.netflix.feign.ribbon.LoadBalancerFeignClient; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @@ -33,7 +35,6 @@ import org.springframework.context.annotation.Primary; import feign.Client; import feign.Request; import feign.Response; -import feign.ribbon.RibbonClient; /** * @@ -44,16 +45,21 @@ import feign.ribbon.RibbonClient; @Configuration @ConditionalOnDependenciesPassed @ConditionalOnProperty(value = "spring.cloud.zookeeper.dependencies.headers.enabled", matchIfMissing = true) -@ConditionalOnClass({ Client.class, RibbonClient.class }) +@ConditionalOnClass({ Client.class, LoadBalancerFeignClient.class }) public class DependencyFeignClientAutoConfiguration { + @Autowired + private LoadBalancerFeignClient ribbonClient; + + @Autowired + private ZookeeperDependencies zookeeperDependencies; + + @Autowired + private CachingSpringLoadBalancerFactory loadBalancerFactory; @Bean @Primary - @SuppressWarnings("deprecation") - Client dependencyBasedFeignClient(final LoadBalancerFeignClient ribbonClient, - final ZookeeperDependencies zookeeperDependencies) { - // TODO: remove dependency on feign-ribbon - return new RibbonClient() { + Client dependencyBasedFeignClient() { + return new LoadBalancerFeignClient(new Client.Default(null, null), loadBalancerFactory) { @Override public Response execute(Request request, Request.Options options) throws IOException { diff --git a/spring-cloud-zookeeper-sample/pom.xml b/spring-cloud-zookeeper-sample/pom.xml index a3e66e17..bd1db15d 100644 --- a/spring-cloud-zookeeper-sample/pom.xml +++ b/spring-cloud-zookeeper-sample/pom.xml @@ -40,6 +40,11 @@ org.springframework.boot spring-boot-starter-actuator + + org.springframework.cloud + spring-cloud-starter-feign + ${spring-cloud-netflix.version} + org.projectlombok lombok diff --git a/spring-cloud-zookeeper-sample/src/main/java/org/springframework/cloud/zookeeper/sample/SampleZookeeperApplication.java b/spring-cloud-zookeeper-sample/src/main/java/org/springframework/cloud/zookeeper/sample/SampleZookeeperApplication.java index 02bcb9c2..35fca373 100644 --- a/spring-cloud-zookeeper-sample/src/main/java/org/springframework/cloud/zookeeper/sample/SampleZookeeperApplication.java +++ b/spring-cloud-zookeeper-sample/src/main/java/org/springframework/cloud/zookeeper/sample/SampleZookeeperApplication.java @@ -16,8 +16,6 @@ package org.springframework.cloud.zookeeper.sample; -import lombok.extern.slf4j.Slf4j; - import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.SpringApplication; @@ -26,9 +24,12 @@ import org.springframework.boot.bind.RelaxedPropertyResolver; import org.springframework.cloud.client.ServiceInstance; import org.springframework.cloud.client.discovery.EnableDiscoveryClient; import org.springframework.cloud.client.loadbalancer.LoadBalancerClient; +import org.springframework.cloud.netflix.feign.EnableFeignClients; +import org.springframework.cloud.netflix.feign.FeignClient; import org.springframework.context.annotation.Configuration; import org.springframework.core.env.Environment; import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; @@ -39,7 +40,7 @@ import org.springframework.web.bind.annotation.RestController; @EnableAutoConfiguration @EnableDiscoveryClient @RestController -@Slf4j +@EnableFeignClients public class SampleZookeeperApplication { @Value("${spring.application.name:testZookeeperApp}") @@ -51,21 +52,37 @@ public class SampleZookeeperApplication { @Autowired private Environment env; - @Autowired(required = false) - private RelaxedPropertyResolver resolver; - - public static void main(String[] args) { - SpringApplication.run(SampleZookeeperApplication.class, args); - } + @Autowired + private AppClient appClient; @RequestMapping("/") public ServiceInstance lb() { return loadBalancer.choose(appName); } + @RequestMapping("/hi") + public String hi() { + return "Hello World!"; + } + + @RequestMapping("/self") + public String self() { + return appClient.hi(); + } + @RequestMapping("/myenv") public String env(@RequestParam("prop") String prop) { String property = new RelaxedPropertyResolver(env).getProperty(prop, "Not Found"); return property; } + + @FeignClient("testZookeeperApp") + interface AppClient { + @RequestMapping(value = "/hi", method = RequestMethod.GET) + String hi(); + } + + public static void main(String[] args) { + SpringApplication.run(SampleZookeeperApplication.class, args); + } } diff --git a/spring-cloud-zookeeper-sample/src/main/resources/application.yml b/spring-cloud-zookeeper-sample/src/main/resources/application.yml index 6901623d..d2e2e420 100644 --- a/spring-cloud-zookeeper-sample/src/main/resources/application.yml +++ b/spring-cloud-zookeeper-sample/src/main/resources/application.yml @@ -10,4 +10,7 @@ endpoints: sensitive: false logging.level: - org.apache.zookeeper.ClientCnxn: WARN \ No newline at end of file + org.apache.zookeeper.ClientCnxn: WARN + +#spring.cloud.zookeeper.dependencies: +# - testZookeeperApp: ~ \ No newline at end of file