diff --git a/pom.xml b/pom.xml
index cafae230..07e113be 100644
--- a/pom.xml
+++ b/pom.xml
@@ -107,6 +107,23 @@
spring-cloud-config-client
1.0.0.BUILD-SNAPSHOT
+
+ com.ecwid.consul
+ consul-api
+ 0.1
+
+
+ javax.servlet
+ servlet-api
+
+
+
+
+
+ org.apache.httpcomponents
+ httpclient
+ 4.2.5
+
org.springframework.cloud
spring-cloud-starter-zuul
@@ -132,21 +149,6 @@
spring-cloud-netflix-core
1.0.0.BUILD-SNAPSHOT
-
- com.netflix.feign
- feign-core
- ${feign.version}
-
-
- com.netflix.feign
- feign-jackson
- ${feign.version}
-
-
- com.netflix.feign
- feign-slf4j
- ${feign.version}
-
com.netflix.ribbon
ribbon
diff --git a/spring-cloud-consul-bus/src/main/java/org/springframework/cloud/consul/bus/ConsulBusAutoConfiguration.java b/spring-cloud-consul-bus/src/main/java/org/springframework/cloud/consul/bus/ConsulBusAutoConfiguration.java
index 6fdd13e5..8abb03b1 100644
--- a/spring-cloud-consul-bus/src/main/java/org/springframework/cloud/consul/bus/ConsulBusAutoConfiguration.java
+++ b/spring-cloud-consul-bus/src/main/java/org/springframework/cloud/consul/bus/ConsulBusAutoConfiguration.java
@@ -1,5 +1,6 @@
package org.springframework.cloud.consul.bus;
+import com.ecwid.consul.v1.ConsulClient;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
@@ -8,7 +9,6 @@ import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression;
import org.springframework.cloud.bus.BusAutoConfiguration;
import org.springframework.cloud.bus.event.RemoteApplicationEvent;
-import org.springframework.cloud.consul.client.EventClient;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.integration.dsl.IntegrationFlow;
@@ -22,7 +22,7 @@ import org.springframework.scheduling.annotation.EnableScheduling;
* @author Spencer Gibb
*/
@Configuration
-@ConditionalOnClass(EventClient.class)
+@ConditionalOnClass(ConsulClient.class)
@ConditionalOnExpression("${bus.consul.enabled:true}")
@AutoConfigureAfter(BusAutoConfiguration.class)
@EnableScheduling
diff --git a/spring-cloud-consul-bus/src/main/java/org/springframework/cloud/consul/bus/ConsulInboundChannelAdapter.java b/spring-cloud-consul-bus/src/main/java/org/springframework/cloud/consul/bus/ConsulInboundChannelAdapter.java
index a3a70c28..ee9f773f 100644
--- a/spring-cloud-consul-bus/src/main/java/org/springframework/cloud/consul/bus/ConsulInboundChannelAdapter.java
+++ b/spring-cloud-consul-bus/src/main/java/org/springframework/cloud/consul/bus/ConsulInboundChannelAdapter.java
@@ -2,8 +2,6 @@ package org.springframework.cloud.consul.bus;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.cloud.consul.client.EventService;
-import org.springframework.cloud.consul.model.Event;
import org.springframework.integration.endpoint.MessageProducerSupport;
import org.springframework.scheduling.annotation.Scheduled;
@@ -18,8 +16,8 @@ import java.util.Map;
* @author Spencer Gibb
*/
public class ConsulInboundChannelAdapter extends MessageProducerSupport {
- @Autowired
- private EventService eventService;
+ //@Autowired
+ //private EventService eventService;
@Autowired
private ObjectMapper objectMapper;
@@ -47,7 +45,7 @@ public class ConsulInboundChannelAdapter extends MessageProducerSupport {
@Scheduled(fixedDelayString = "10")
public void getEvents() throws IOException {
- List events = eventService.watch();
+ /*FIXME: List events = eventService.watch();
for (Event event : events) {
Map headers = new HashMap<>();
//headers.put(MessageHeaders.REPLY_CHANNEL, outputChannel.)
@@ -56,7 +54,7 @@ public class ConsulInboundChannelAdapter extends MessageProducerSupport {
.withPayload(objectMapper.readValue(event.getDecoded(), String.class))
//TODO: support headers
.build());
- }
+ }*/
}
@Override
diff --git a/spring-cloud-consul-bus/src/main/java/org/springframework/cloud/consul/bus/ConsulOutboundEndpoint.java b/spring-cloud-consul-bus/src/main/java/org/springframework/cloud/consul/bus/ConsulOutboundEndpoint.java
index ebe008c1..7b8d5d0f 100644
--- a/spring-cloud-consul-bus/src/main/java/org/springframework/cloud/consul/bus/ConsulOutboundEndpoint.java
+++ b/spring-cloud-consul-bus/src/main/java/org/springframework/cloud/consul/bus/ConsulOutboundEndpoint.java
@@ -1,8 +1,11 @@
package org.springframework.cloud.consul.bus;
+import com.ecwid.consul.v1.ConsulClient;
+import com.ecwid.consul.v1.QueryParams;
+import com.ecwid.consul.v1.Response;
+import com.ecwid.consul.v1.event.model.Event;
+import com.ecwid.consul.v1.event.model.EventParams;
import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.cloud.consul.client.EventService;
-import org.springframework.cloud.consul.model.Event;
import org.springframework.integration.handler.AbstractReplyProducingMessageHandler;
import org.springframework.messaging.Message;
@@ -13,14 +16,14 @@ import org.springframework.messaging.Message;
public class ConsulOutboundEndpoint extends AbstractReplyProducingMessageHandler {
@Autowired
- protected EventService eventService;
+ protected ConsulClient consul;
@Override
protected Object handleRequestMessage(Message> requestMessage) {
Object payload = requestMessage.getPayload();
//TODO: support headers
//TODO: support consul event filters: NodeFilter, ServiceFilter, TagFilter
- Event event = eventService.fire("springCloudBus", (String) payload);
+ Response event = consul.eventFire("springCloudBus", (String) payload, new EventParams(), QueryParams.DEFAULT);
//TODO: return event?
return null;
}
diff --git a/spring-cloud-consul-config/src/main/java/org/springframework/cloud/consul/config/ConsulPropertySource.java b/spring-cloud-consul-config/src/main/java/org/springframework/cloud/consul/config/ConsulPropertySource.java
index c648b335..9364c010 100644
--- a/spring-cloud-consul-config/src/main/java/org/springframework/cloud/consul/config/ConsulPropertySource.java
+++ b/spring-cloud-consul-config/src/main/java/org/springframework/cloud/consul/config/ConsulPropertySource.java
@@ -1,22 +1,26 @@
package org.springframework.cloud.consul.config;
-import org.springframework.cloud.consul.client.KeyValueClient;
-import org.springframework.cloud.consul.client.NotFoundException;
-import org.springframework.cloud.consul.model.KeyValue;
+import com.ecwid.consul.v1.ConsulClient;
+import com.ecwid.consul.v1.QueryParams;
+import com.ecwid.consul.v1.Response;
+import com.ecwid.consul.v1.kv.model.GetValue;
import org.springframework.core.env.EnumerablePropertySource;
import java.util.*;
+import static com.google.common.base.Charsets.UTF_8;
+import static com.google.common.io.BaseEncoding.base64;
+
/**
* @author Spencer Gibb
*/
-public class ConsulPropertySource extends EnumerablePropertySource {
+public class ConsulPropertySource extends EnumerablePropertySource {
private String context;
private Map properties = new LinkedHashMap<>();
- public ConsulPropertySource(String context, KeyValueClient source) {
+ public ConsulPropertySource(String context, ConsulClient source) {
super(context, source);
this.context = context;
@@ -26,21 +30,26 @@ public class ConsulPropertySource extends EnumerablePropertySource keyValues = source.getKeyValueRecurse(context);
+ Response> response = source.getKVValues(context, QueryParams.DEFAULT);
+ List values = response.getValue();
- for (KeyValue keyValue : keyValues) {
- String key = keyValue.getKey()
- .replace(context, "")
- .replace('/', '.');
- String value = keyValue.getDecoded();
+ if (values != null) {
+ for (GetValue getValue : values) {
+ String key = getValue.getKey()
+ .replace(context, "")
+ .replace('/', '.');
+ String value = getDecoded(getValue.getValue());
properties.put(key, value);
}
- } catch (NotFoundException e) {
- //not found, do nothing
}
}
+ public String getDecoded(String value) {
+ if (value == null)
+ return null;
+ return new String(base64().decode(value), UTF_8);
+ }
+
@Override
public Object getProperty(String name) {
return properties.get(name);
diff --git a/spring-cloud-consul-config/src/main/java/org/springframework/cloud/consul/config/ConsulPropertySourceLocator.java b/spring-cloud-consul-config/src/main/java/org/springframework/cloud/consul/config/ConsulPropertySourceLocator.java
index f3c949d4..d5862d2d 100644
--- a/spring-cloud-consul-config/src/main/java/org/springframework/cloud/consul/config/ConsulPropertySourceLocator.java
+++ b/spring-cloud-consul-config/src/main/java/org/springframework/cloud/consul/config/ConsulPropertySourceLocator.java
@@ -1,9 +1,9 @@
package org.springframework.cloud.consul.config;
+import com.ecwid.consul.v1.ConsulClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.config.client.PropertySourceLocator;
import org.springframework.cloud.consul.ConsulProperties;
-import org.springframework.cloud.consul.client.KeyValueClient;
import org.springframework.core.env.*;
import java.util.ArrayList;
@@ -16,7 +16,7 @@ import java.util.List;
public class ConsulPropertySourceLocator implements PropertySourceLocator {
@Autowired
- private KeyValueClient keyValueClient;
+ private ConsulClient consul;
@Autowired
private ConsulProperties properties;
@@ -53,7 +53,7 @@ public class ConsulPropertySourceLocator implements PropertySourceLocator {
}
private ConsulPropertySource create(String context) {
- return new ConsulPropertySource(context, keyValueClient);
+ return new ConsulPropertySource(context, consul);
}
private void addProfiles(List contexts, String baseContext, List profiles) {
diff --git a/spring-cloud-consul-core/pom.xml b/spring-cloud-consul-core/pom.xml
index d1bb308f..7c28bb10 100644
--- a/spring-cloud-consul-core/pom.xml
+++ b/spring-cloud-consul-core/pom.xml
@@ -1,6 +1,7 @@
-
+
4.0.0
spring-cloud-consul-core
@@ -24,21 +25,13 @@
org.springframework.boot
spring-boot-starter-actuator
-
- org.springframework.cloud
- spring-cloud-commons
-
- com.netflix.feign
- feign-core
+ org.springframework.cloud
+ spring-cloud-commons
-
- com.netflix.feign
- feign-jackson
-
- com.netflix.feign
- feign-slf4j
+ com.ecwid.consul
+ consul-api
org.projectlombok
@@ -51,10 +44,10 @@
spring-boot-starter-test
test
-
- com.google.guava
- guava
-
+
+ com.google.guava
+ guava
+
diff --git a/spring-cloud-consul-core/src/main/java/org/springframework/cloud/consul/ConsulAutoConfiguration.java b/spring-cloud-consul-core/src/main/java/org/springframework/cloud/consul/ConsulAutoConfiguration.java
index 8a6f0b8a..a45ad28c 100644
--- a/spring-cloud-consul-core/src/main/java/org/springframework/cloud/consul/ConsulAutoConfiguration.java
+++ b/spring-cloud-consul-core/src/main/java/org/springframework/cloud/consul/ConsulAutoConfiguration.java
@@ -1,12 +1,8 @@
package org.springframework.cloud.consul;
-import feign.Feign;
-import feign.Logger;
-import feign.jackson.JacksonDecoder;
-import feign.jackson.JacksonEncoder;
+import com.ecwid.consul.v1.ConsulClient;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
-import org.springframework.cloud.consul.client.*;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@@ -16,11 +12,6 @@ import org.springframework.context.annotation.Configuration;
@Configuration
@EnableConfigurationProperties
public class ConsulAutoConfiguration {
- protected Feign.Builder builder = Feign.builder()
- .logger(new Logger.JavaLogger())
- .errorDecoder(new ConsulErrorDecoder())
- .decoder(new JacksonDecoder())
- .encoder(new JacksonEncoder());
@Bean
@ConditionalOnMissingBean
@@ -30,32 +21,8 @@ public class ConsulAutoConfiguration {
@Bean
@ConditionalOnMissingBean
- public AgentClient agentClient() {
- return builder.target(AgentClient.class, consulProperties().getUrl());
- }
-
- @Bean
- @ConditionalOnMissingBean
- public CatalogClient catalogClient() {
- return builder.target(CatalogClient.class, consulProperties().getUrl());
- }
-
- @Bean
- @ConditionalOnMissingBean
- public KeyValueClient kvClient() {
- return builder.target(KeyValueClient.class, consulProperties().getUrl());
- }
-
- @Bean
- @ConditionalOnMissingBean
- public EventClient eventClient() {
- return builder.target(EventClient.class, consulProperties().getUrl());
- }
-
- @Bean
- @ConditionalOnMissingBean
- public EventService eventService() {
- return new EventService();
+ public ConsulClient consulClient() {
+ return new ConsulClient(consulProperties().getHost(), consulProperties().getPort());
}
@Bean
diff --git a/spring-cloud-consul-core/src/main/java/org/springframework/cloud/consul/ConsulEndpoint.java b/spring-cloud-consul-core/src/main/java/org/springframework/cloud/consul/ConsulEndpoint.java
index 47912ee9..02b717b1 100644
--- a/spring-cloud-consul-core/src/main/java/org/springframework/cloud/consul/ConsulEndpoint.java
+++ b/spring-cloud-consul-core/src/main/java/org/springframework/cloud/consul/ConsulEndpoint.java
@@ -1,15 +1,15 @@
package org.springframework.cloud.consul;
+import com.ecwid.consul.v1.ConsulClient;
+import com.ecwid.consul.v1.QueryParams;
+import com.ecwid.consul.v1.Response;
+import com.ecwid.consul.v1.agent.model.Service;
+import com.ecwid.consul.v1.catalog.model.CatalogService;
+import com.ecwid.consul.v1.catalog.model.Node;
import lombok.Data;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.actuate.endpoint.AbstractEndpoint;
import org.springframework.boot.context.properties.ConfigurationProperties;
-import org.springframework.cloud.consul.client.AgentClient;
-import org.springframework.cloud.consul.client.CatalogClient;
-import org.springframework.cloud.consul.client.KeyValueClient;
-import org.springframework.cloud.consul.model.KeyValue;
-import org.springframework.cloud.consul.model.Service;
-import org.springframework.cloud.consul.model.ServiceNode;
import java.util.LinkedHashMap;
import java.util.List;
@@ -22,13 +22,7 @@ import java.util.Map;
public class ConsulEndpoint extends AbstractEndpoint {
@Autowired
- KeyValueClient keyValueClient;
-
- @Autowired
- CatalogClient catalogClient;
-
- @Autowired
- AgentClient agentClient;
+ private ConsulClient consul;
@Autowired
public ConsulEndpoint() {
@@ -39,25 +33,31 @@ public class ConsulEndpoint extends AbstractEndpoint
public ConsulData invoke() {
ConsulData data = new ConsulData();
//data.setKeyValues(kvClient.getKeyValueRecurse());
- data.setCatalogServices(catalogClient.getServices());
- Map services = agentClient.getServices();
- data.setAgentServices(services);
+ Response