diff --git a/pom.xml b/pom.xml
index e15a962c..44aaf3a5 100644
--- a/pom.xml
+++ b/pom.xml
@@ -108,6 +108,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
@@ -133,21 +150,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 eee63983..ed025c00 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
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
+
+ org.springframework.boot
+ spring-boot-starter-web
+
diff --git a/spring-cloud-consul-discovery/src/main/java/org/springframework/cloud/consul/discovery/ConsulDiscoveryClient.java b/spring-cloud-consul-discovery/src/main/java/org/springframework/cloud/consul/discovery/ConsulDiscoveryClient.java
index 65c69d8e..8251b7d4 100644
--- a/spring-cloud-consul-discovery/src/main/java/org/springframework/cloud/consul/discovery/ConsulDiscoveryClient.java
+++ b/spring-cloud-consul-discovery/src/main/java/org/springframework/cloud/consul/discovery/ConsulDiscoveryClient.java
@@ -1,13 +1,12 @@
package org.springframework.cloud.consul.discovery;
+import com.ecwid.consul.v1.ConsulClient;
+import com.google.common.base.Function;
+import com.google.common.collect.Lists;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.client.DefaultServiceInstance;
import org.springframework.cloud.client.ServiceInstance;
import org.springframework.cloud.client.discovery.DiscoveryClient;
-import org.springframework.cloud.consul.client.AgentClient;
-import org.springframework.cloud.consul.client.CatalogClient;
-import org.springframework.cloud.consul.model.Service;
-import org.springframework.cloud.consul.model.ServiceNode;
import org.springframework.context.ApplicationContext;
import java.util.ArrayList;
@@ -23,10 +22,7 @@ public class ConsulDiscoveryClient implements DiscoveryClient {
ApplicationContext context;
@Autowired
- AgentClient agentClient;
-
- @Autowired
- CatalogClient catalogClient;
+ ConsulClient client;
@Override
public String description() {
@@ -35,7 +31,7 @@ public class ConsulDiscoveryClient implements DiscoveryClient {
@Override
public ServiceInstance getLocalServiceInstance() {
- Map services = agentClient.getServices();
+ /*Map services = agentClient.getServices();
Service service = services.get(context.getId());
if (service == null) {
throw new IllegalStateException("Unable to locate service in consul agent: "+context.getId());
@@ -48,22 +44,24 @@ public class ConsulDiscoveryClient implements DiscoveryClient {
host = (String) member.get("Name");
}
}
- return new DefaultServiceInstance(service.getId(), host, service.getPort(), false);
+ return new DefaultServiceInstance(service.getId(), host, service.getPort() false);*/
+ return null;
}
@Override
public List getInstances(final String serviceId) {
- List nodes = catalogClient.getServiceNodes(serviceId);
+ /*List nodes = catalogClient.getServiceNodes(serviceId);
List instances = new ArrayList<>();
for (ServiceNode node : nodes) {
instances.add(new DefaultServiceInstance(serviceId, node.getNode(), node.getServicePort(), false));
}
- return instances;
+ return instances;*/
+ return new ArrayList<>();
}
public List getAllInstances() {
- List instances = new ArrayList<>();
+ /*List instances = new ArrayList<>();
for (String serviceId : catalogClient.getServices().keySet()) {
List serviceNodes = catalogClient.getServiceNodes(serviceId);
@@ -73,11 +71,13 @@ public class ConsulDiscoveryClient implements DiscoveryClient {
}
}
}
- return instances;
+ return instances;*/
+ return new ArrayList<>();
}
@Override
public List getServices() {
- return new ArrayList<>(catalogClient.getServices().keySet());
+ //return new ArrayList<>(catalogClient.getServices().keySet());
+ return new ArrayList<>();
}
}
diff --git a/spring-cloud-consul-discovery/src/main/java/org/springframework/cloud/consul/discovery/ConsulLifecycle.java b/spring-cloud-consul-discovery/src/main/java/org/springframework/cloud/consul/discovery/ConsulLifecycle.java
index 238121ab..b1909ca0 100644
--- a/spring-cloud-consul-discovery/src/main/java/org/springframework/cloud/consul/discovery/ConsulLifecycle.java
+++ b/spring-cloud-consul-discovery/src/main/java/org/springframework/cloud/consul/discovery/ConsulLifecycle.java
@@ -1,11 +1,11 @@
package org.springframework.cloud.consul.discovery;
+import com.ecwid.consul.v1.ConsulClient;
+import com.ecwid.consul.v1.agent.model.NewService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.client.discovery.AbstractDiscoveryLifecycle;
import org.springframework.cloud.consul.ConsulProperties;
-import org.springframework.cloud.consul.client.AgentClient;
-import org.springframework.cloud.consul.model.Service;
/**
* @author Spencer Gibb
@@ -14,15 +14,16 @@ import org.springframework.cloud.consul.model.Service;
public class ConsulLifecycle extends AbstractDiscoveryLifecycle {
@Autowired
- private AgentClient agentClient;
+ private ConsulClient client;
@Autowired
private ConsulProperties consulProperties;
@Override
protected void register() {
- Service service = new Service();
+ NewService service = new NewService();
String appName = getAppName();
+ //TODO: move id to properties with context ID as default
service.setId(getContext().getId());
service.setName(appName);
//TODO: support port = 0 random assignment
@@ -36,7 +37,7 @@ public class ConsulLifecycle extends AbstractDiscoveryLifecycle {
@Override
protected void registerManagement() {
- Service management = new Service();
+ NewService management = new NewService();
management.setId(getManagementServiceId());
management.setName(getManagementServiceName());
management.setPort(getManagementPort());
@@ -45,9 +46,9 @@ public class ConsulLifecycle extends AbstractDiscoveryLifecycle {
register(management);
}
- protected void register(Service service) {
+ protected void register(NewService service) {
log.info("Registering service with consul: {}", service.toString());
- agentClient.register(service);
+ client.agentServiceRegister(service);
}
@Override
@@ -66,7 +67,7 @@ public class ConsulLifecycle extends AbstractDiscoveryLifecycle {
}
private void deregister(String serviceId) {
- agentClient.deregister(serviceId);
+ client.agentServiceDeregister(serviceId);
}
@Override
diff --git a/spring-cloud-consul-discovery/src/main/java/org/springframework/cloud/consul/discovery/ConsulRibbonClientConfiguration.java b/spring-cloud-consul-discovery/src/main/java/org/springframework/cloud/consul/discovery/ConsulRibbonClientConfiguration.java
index 2a67ef71..991bc123 100644
--- a/spring-cloud-consul-discovery/src/main/java/org/springframework/cloud/consul/discovery/ConsulRibbonClientConfiguration.java
+++ b/spring-cloud-consul-discovery/src/main/java/org/springframework/cloud/consul/discovery/ConsulRibbonClientConfiguration.java
@@ -21,11 +21,12 @@ import static com.netflix.client.config.CommonClientConfigKey.EnableZoneAffinity
import javax.annotation.PostConstruct;
+import com.ecwid.consul.v1.ConsulClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
+import org.springframework.beans.factory.config.BeanPostProcessor;
+import org.springframework.cloud.netflix.ribbon.ZonePreferenceServerListFilter;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
-import org.springframework.cloud.consul.client.CatalogClient;
-import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import com.netflix.client.config.IClientConfig;
@@ -45,7 +46,7 @@ import com.netflix.loadbalancer.ServerList;
@Configuration
public class ConsulRibbonClientConfiguration {
@Autowired
- CatalogClient client;
+ private ConsulClient client;
@Value("${ribbon.client.name}")
private String serviceId = "client";
diff --git a/spring-cloud-consul-discovery/src/main/java/org/springframework/cloud/consul/discovery/ConsulServer.java b/spring-cloud-consul-discovery/src/main/java/org/springframework/cloud/consul/discovery/ConsulServer.java
index c1282f29..9d1c2b82 100644
--- a/spring-cloud-consul-discovery/src/main/java/org/springframework/cloud/consul/discovery/ConsulServer.java
+++ b/spring-cloud-consul-discovery/src/main/java/org/springframework/cloud/consul/discovery/ConsulServer.java
@@ -1,7 +1,7 @@
package org.springframework.cloud.consul.discovery;
+import com.ecwid.consul.v1.catalog.model.CatalogService;
import com.netflix.loadbalancer.Server;
-import org.springframework.cloud.consul.model.ServiceNode;
/**
* @author Spencer Gibb
@@ -10,12 +10,12 @@ public class ConsulServer extends Server {
private final MetaInfo metaInfo;
- public ConsulServer(final ServiceNode node) {
- super(node.getNode(), node.getServicePort());
+ public ConsulServer(final CatalogService service) {
+ super(service.getNode(), service.getServicePort());
metaInfo = new MetaInfo() {
@Override
public String getAppName() {
- return node.getServiceName();
+ return service.getServiceName();
}
@Override
@@ -30,7 +30,7 @@ public class ConsulServer extends Server {
@Override
public String getInstanceId() {
- return node.getServiceID();
+ return service.getServiceId();
}
};
}
diff --git a/spring-cloud-consul-discovery/src/main/java/org/springframework/cloud/consul/discovery/ConsulServerList.java b/spring-cloud-consul-discovery/src/main/java/org/springframework/cloud/consul/discovery/ConsulServerList.java
index 066fab1a..e2eb94ab 100644
--- a/spring-cloud-consul-discovery/src/main/java/org/springframework/cloud/consul/discovery/ConsulServerList.java
+++ b/spring-cloud-consul-discovery/src/main/java/org/springframework/cloud/consul/discovery/ConsulServerList.java
@@ -1,9 +1,12 @@
package org.springframework.cloud.consul.discovery;
+import com.ecwid.consul.v1.ConsulClient;
+import com.ecwid.consul.v1.QueryParams;
+import com.ecwid.consul.v1.Response;
+import com.ecwid.consul.v1.catalog.model.CatalogService;
+import com.google.common.base.Function;
import com.netflix.client.config.IClientConfig;
import com.netflix.loadbalancer.AbstractServerList;
-import org.springframework.cloud.consul.client.CatalogClient;
-import org.springframework.cloud.consul.model.ServiceNode;
import java.util.ArrayList;
import java.util.Collections;
@@ -14,19 +17,19 @@ import java.util.List;
*/
public class ConsulServerList extends AbstractServerList {
- private CatalogClient client;
+ private ConsulClient client;
private String serviceId;
public ConsulServerList() {
}
- public ConsulServerList(CatalogClient client, String serviceId) {
+ public ConsulServerList(ConsulClient client, String serviceId) {
this.client = client;
this.serviceId = serviceId;
}
- public void setClient(CatalogClient client) {
+ public void setClient(ConsulClient client) {
this.client = client;
}
@@ -49,14 +52,14 @@ public class ConsulServerList extends AbstractServerList {
if (client == null) {
return Collections.emptyList();
}
- List nodes = client.getServiceNodes(serviceId);
- if (nodes == null || nodes.isEmpty()) {
+ Response> response = client.getCatalogService(this.serviceId, QueryParams.DEFAULT);
+ if (response.getValue() == null || response.getValue().isEmpty()) {
return Collections.EMPTY_LIST;
}
List servers = new ArrayList<>();
- for (ServiceNode node : nodes) {
- ConsulServer server = new ConsulServer(node);
+ for (CatalogService service : response.getValue()) {
+ ConsulServer server = new ConsulServer(service);
servers.add(server);
}
diff --git a/spring-cloud-consul-discovery/src/test/java/org/springframework/cloud/consul/discovery/ConsulLifecycleTests.java b/spring-cloud-consul-discovery/src/test/java/org/springframework/cloud/consul/discovery/ConsulLifecycleTests.java
new file mode 100644
index 00000000..145e9509
--- /dev/null
+++ b/spring-cloud-consul-discovery/src/test/java/org/springframework/cloud/consul/discovery/ConsulLifecycleTests.java
@@ -0,0 +1,60 @@
+package org.springframework.cloud.consul.discovery;
+
+import com.ecwid.consul.v1.ConsulClient;
+import com.ecwid.consul.v1.Response;
+import com.ecwid.consul.v1.agent.model.Service;
+import org.junit.FixMethodOrder;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.MethodSorters;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
+import org.springframework.boot.test.IntegrationTest;
+import org.springframework.boot.test.SpringApplicationConfiguration;
+import org.springframework.cloud.consul.ConsulAutoConfiguration;
+import org.springframework.context.ApplicationContext;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.Import;
+import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
+import org.springframework.test.context.web.WebAppConfiguration;
+
+import java.util.Map;
+
+import static org.junit.Assert.*;
+
+/**
+ * @author Spencer Gibb
+ */
+@RunWith(SpringJUnit4ClassRunner.class)
+@FixMethodOrder(MethodSorters.NAME_ASCENDING)
+@SpringApplicationConfiguration(classes = TestConfig.class)
+@IntegrationTest({"server.port=0", "spring.application.name=myTestService"})
+@WebAppConfiguration
+public class ConsulLifecycleTests {
+
+ @Autowired
+ ConsulLifecycle lifecycle;
+
+ @Autowired
+ ConsulClient consul;
+
+ @Autowired
+ ApplicationContext context;
+
+ @Test
+ public void contextLoads() {
+ Response> response = consul.getAgentServices();
+ Map services = response.getValue();
+ Service service = services.get(context.getId());
+ assertNotNull("service was null", service);
+ assertEquals("service id was wrong", service.getId(), context.getId());
+ assertEquals("service name was wrong", service.getService(), "myTestService");
+ }
+}
+
+@Configuration
+@EnableAutoConfiguration
+@Import({ConsulAutoConfiguration.class, ConsulDiscoveryClientConfiguration.class})
+class TestConfig {
+
+}
diff --git a/spring-cloud-consul-tests/src/test/java/org/springframework/cloud/consul/sidecar/SidecarApplicationTests.java b/spring-cloud-consul-tests/src/test/java/org/springframework/cloud/consul/sidecar/SidecarApplicationTests.java
index 4464a646..acbb5b44 100644
--- a/spring-cloud-consul-tests/src/test/java/org/springframework/cloud/consul/sidecar/SidecarApplicationTests.java
+++ b/spring-cloud-consul-tests/src/test/java/org/springframework/cloud/consul/sidecar/SidecarApplicationTests.java
@@ -31,6 +31,7 @@ import org.springframework.cloud.netflix.zuul.EnableZuulProxy;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Import;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
+import org.springframework.test.context.web.WebAppConfiguration;
import org.springframework.web.bind.annotation.RestController;
import java.lang.annotation.*;
@@ -38,6 +39,7 @@ import java.lang.annotation.*;
@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = SidecarApplicationTests.SidecarApplication.class)
@IntegrationTest("server.port=0")
+@WebAppConfiguration
public class SidecarApplicationTests {
@Test
diff --git a/spring-cloud-consul-tests/src/test/java/org/springframework/cloud/consul/sidecar/ZuulApplicationTests.java b/spring-cloud-consul-tests/src/test/java/org/springframework/cloud/consul/sidecar/ZuulApplicationTests.java
index 8cf597f7..e6394349 100644
--- a/spring-cloud-consul-tests/src/test/java/org/springframework/cloud/consul/sidecar/ZuulApplicationTests.java
+++ b/spring-cloud-consul-tests/src/test/java/org/springframework/cloud/consul/sidecar/ZuulApplicationTests.java
@@ -29,10 +29,12 @@ import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.netflix.zuul.EnableZuulProxy;
import org.springframework.context.annotation.Bean;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
+import org.springframework.test.context.web.WebAppConfiguration;
@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = ZuulApplicationTests.ZuulApplication.class)
@IntegrationTest("server.port=0")
+@WebAppConfiguration
public class ZuulApplicationTests {
@Test