You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@servicecomb.apache.org by wu...@apache.org on 2018/01/09 06:54:18 UTC
[incubator-servicecomb-java-chassis] 01/06: [SCB-184]Provide
starters for Spring Cloud to using service-center and config-center
This is an automated email from the ASF dual-hosted git repository.
wujimin pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-servicecomb-java-chassis.git
commit 7052c7d4429422f215c4648be65b4d94e97a185d
Author: bao.liu <ba...@huawei.com>
AuthorDate: Sat Jan 6 09:18:54 2018 +0800
[SCB-184]Provide starters for Spring Cloud to using service-center and config-center
---
.../src/test/resources/application.yml | 11 ++-
.../spring-boot-starter-discovery/pom.xml | 38 +--------
.../starter/discovery/CseDiscoveryClient.java | 40 ++++-----
.../discovery/CseDiscoveryClientConfiguration.java | 20 +----
.../starter/discovery/CseDiscoveryProperties.java | 48 -----------
.../discovery/CseRibbonClientConfiguration.java | 96 ++++++++++------------
...figuration.java => CseRibbonConfiguration.java} | 70 ++++++++--------
.../starter/discovery/CseRoutesProperties.java | 42 ----------
.../discovery/CseServerListCacheWrapper.java | 36 --------
.../starter/discovery/CseServerWrapper.java | 40 ---------
.../discovery/ServiceCombDiscoveryException.java | 26 ------
.../starter/discovery/ServiceCombServerList.java | 64 +++++++--------
.../src/main/resources/META-INF/spring.factories | 6 +-
.../discovery/ServiceCombServerListTest.java | 62 --------------
.../starter/discovery/TestCseDiscoveryClient.java | 68 +++++++++++++++
.../discovery/TestServiceCombServerList.java | 59 +++++++++++++
16 files changed, 265 insertions(+), 461 deletions(-)
diff --git a/demo/demo-spring-boot-discovery/demo-spring-boot-zuul-proxy/src/test/resources/application.yml b/demo/demo-spring-boot-discovery/demo-spring-boot-zuul-proxy/src/test/resources/application.yml
index 2d867a7..ef24bce 100644
--- a/demo/demo-spring-boot-discovery/demo-spring-boot-zuul-proxy/src/test/resources/application.yml
+++ b/demo/demo-spring-boot-discovery/demo-spring-boot-zuul-proxy/src/test/resources/application.yml
@@ -17,16 +17,15 @@
server:
port: 0
-spring:
- cloud:
- cse:
- host: 127.0.0.1
- port: 9980
+
zuul:
routes:
gateway:
serviceId: discoveryServer
-
+discoveryServer:
+ ribbon:
+ eureka:
+ enabled: false
hystrix:
command:
default:
diff --git a/spring-boot-starter/spring-boot-starter-discovery/pom.xml b/spring-boot-starter/spring-boot-starter-discovery/pom.xml
index 7a3030f..df6c9ff 100644
--- a/spring-boot-starter/spring-boot-starter-discovery/pom.xml
+++ b/spring-boot-starter/spring-boot-starter-discovery/pom.xml
@@ -27,10 +27,6 @@
<dependencies>
<dependency>
- <groupId>org.apache.tomcat.embed</groupId>
- <artifactId>tomcat-embed-logging-juli</artifactId>
- </dependency>
- <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
<exclusions>
@@ -76,39 +72,7 @@
</dependency>
<dependency>
<groupId>io.servicecomb</groupId>
- <artifactId>common-rest</artifactId>
- </dependency>
- <dependency>
- <groupId>io.servicecomb</groupId>
- <artifactId>java-chassis-core</artifactId>
- </dependency>
- <dependency>
- <groupId>io.servicecomb</groupId>
- <artifactId>provider-pojo</artifactId>
- </dependency>
- <dependency>
- <groupId>io.servicecomb</groupId>
- <artifactId>provider-rest-common</artifactId>
- </dependency>
- <dependency>
- <groupId>io.servicecomb</groupId>
- <artifactId>provider-jaxrs</artifactId>
- </dependency>
- <dependency>
- <groupId>io.servicecomb</groupId>
- <artifactId>provider-springmvc</artifactId>
- </dependency>
- <dependency>
- <groupId>io.servicecomb</groupId>
- <artifactId>transport-rest-client</artifactId>
- </dependency>
- <dependency>
- <groupId>io.servicecomb</groupId>
- <artifactId>transport-rest-servlet</artifactId>
- </dependency>
- <dependency>
- <groupId>io.servicecomb</groupId>
- <artifactId>handler-loadbalance</artifactId>
+ <artifactId>service-registry</artifactId>
</dependency>
</dependencies>
</project>
diff --git a/spring-boot-starter/spring-boot-starter-discovery/src/main/java/io/servicecomb/springboot/starter/discovery/CseDiscoveryClient.java b/spring-boot-starter/spring-boot-starter-discovery/src/main/java/io/servicecomb/springboot/starter/discovery/CseDiscoveryClient.java
index 9a63eda..0af0274 100644
--- a/spring-boot-starter/spring-boot-starter-discovery/src/main/java/io/servicecomb/springboot/starter/discovery/CseDiscoveryClient.java
+++ b/spring-boot-starter/spring-boot-starter-discovery/src/main/java/io/servicecomb/springboot/starter/discovery/CseDiscoveryClient.java
@@ -18,25 +18,24 @@ package io.servicecomb.springboot.starter.discovery;
import java.util.ArrayList;
import java.util.List;
-
-import javax.inject.Inject;
+import java.util.Map;
import org.springframework.cloud.client.DefaultServiceInstance;
import org.springframework.cloud.client.ServiceInstance;
import org.springframework.cloud.client.discovery.DiscoveryClient;
-import io.servicecomb.core.provider.consumer.ConsumerProviderManager;
-import io.servicecomb.core.provider.consumer.ReferenceConfig;
+import io.servicecomb.foundation.common.cache.VersionedCache;
import io.servicecomb.foundation.common.net.URIEndpointObject;
import io.servicecomb.serviceregistry.RegistryUtils;
import io.servicecomb.serviceregistry.api.registry.Microservice;
import io.servicecomb.serviceregistry.api.registry.MicroserviceInstance;
import io.servicecomb.serviceregistry.client.ServiceRegistryClient;
+import io.servicecomb.serviceregistry.definition.DefinitionConst;
+import io.servicecomb.serviceregistry.discovery.DiscoveryContext;
+import io.servicecomb.serviceregistry.discovery.DiscoveryTree;
public class CseDiscoveryClient implements DiscoveryClient {
-
- @Inject
- private ConsumerProviderManager consumerProviderManager;
+ private DiscoveryTree discoveryTree = new DiscoveryTree();
@Override
public String description() {
@@ -45,21 +44,18 @@ public class CseDiscoveryClient implements DiscoveryClient {
@Override
public List<ServiceInstance> getInstances(final String serviceId) {
- List<ServiceInstance> instances = new ArrayList<>();
- ServiceRegistryClient client = RegistryUtils.getServiceRegistryClient();
- String appId = RegistryUtils.getAppId();
- ReferenceConfig referenceConfig = consumerProviderManager.getReferenceConfig(serviceId);
- String versionRule = referenceConfig.getMicroserviceVersionRule();
- String cseServiceID = client.getMicroserviceId(appId, serviceId, versionRule);
- List<MicroserviceInstance> cseServices = client.getMicroserviceInstance(cseServiceID, cseServiceID);
- if (null != cseServices && !cseServices.isEmpty()) {
- for (MicroserviceInstance instance : cseServices) {
- List<String> eps = instance.getEndpoints();
- for (String ep : eps) {
- URIEndpointObject uri = new URIEndpointObject(ep);
- instances.add(new DefaultServiceInstance(instance.getServiceId(), uri.getHostOrIp(),
- uri.getPort(), false));
- }
+ DiscoveryContext context = new DiscoveryContext();
+ context.setInputParameters(serviceId);
+ VersionedCache serversVersionedCache = discoveryTree.discovery(context,
+ RegistryUtils.getAppId(),
+ serviceId,
+ DefinitionConst.VERSION_RULE_ALL);
+ Map<String, MicroserviceInstance> servers = serversVersionedCache.data();
+ List<ServiceInstance> instances = new ArrayList<>(servers.size());
+ for (MicroserviceInstance s : servers.values()) {
+ for (String endpoint : s.getEndpoints()) {
+ URIEndpointObject uri = new URIEndpointObject(endpoint);
+ instances.add(new DefaultServiceInstance(serviceId, uri.getHostOrIp(), uri.getPort(), uri.isSslEnabled()));
}
}
return instances;
diff --git a/spring-boot-starter/spring-boot-starter-discovery/src/main/java/io/servicecomb/springboot/starter/discovery/CseDiscoveryClientConfiguration.java b/spring-boot-starter/spring-boot-starter-discovery/src/main/java/io/servicecomb/springboot/starter/discovery/CseDiscoveryClientConfiguration.java
index e8768b0..19b38b7 100644
--- a/spring-boot-starter/spring-boot-starter-discovery/src/main/java/io/servicecomb/springboot/starter/discovery/CseDiscoveryClientConfiguration.java
+++ b/spring-boot-starter/spring-boot-starter-discovery/src/main/java/io/servicecomb/springboot/starter/discovery/CseDiscoveryClientConfiguration.java
@@ -17,33 +17,17 @@
package io.servicecomb.springboot.starter.discovery;
import org.springframework.boot.autoconfigure.AutoConfigureBefore;
-import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
import org.springframework.cloud.client.discovery.DiscoveryClient;
import org.springframework.cloud.client.discovery.noop.NoopDiscoveryClientAutoConfiguration;
-import org.springframework.cloud.netflix.zuul.filters.ZuulProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
-import org.springframework.context.annotation.Primary;
-
-import io.servicecomb.core.provider.consumer.ConsumerProviderManager;
+import org.springframework.core.annotation.Order;
@AutoConfigureBefore(NoopDiscoveryClientAutoConfiguration.class)
@Configuration
public class CseDiscoveryClientConfiguration {
-
- @Bean
- public CseDiscoveryProperties cseDiscoveryProperties() {
- return new CseDiscoveryProperties();
- }
-
- @Bean
- @ConditionalOnBean(ZuulProperties.class)
- public CseRoutesProperties cseRoutesProperties(ConsumerProviderManager manager) {
- return new CseRoutesProperties(manager);
- }
-
@Bean
- @Primary
+ @Order(5000)
public DiscoveryClient cseDiscoveryClient() {
return new CseDiscoveryClient();
}
diff --git a/spring-boot-starter/spring-boot-starter-discovery/src/main/java/io/servicecomb/springboot/starter/discovery/CseDiscoveryProperties.java b/spring-boot-starter/spring-boot-starter-discovery/src/main/java/io/servicecomb/springboot/starter/discovery/CseDiscoveryProperties.java
deleted file mode 100644
index 96773f8..0000000
--- a/spring-boot-starter/spring-boot-starter-discovery/src/main/java/io/servicecomb/springboot/starter/discovery/CseDiscoveryProperties.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You 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 io.servicecomb.springboot.starter.discovery;
-
-import org.springframework.boot.context.properties.ConfigurationProperties;
-
-@ConfigurationProperties("spring.cloud.cse")
-public class CseDiscoveryProperties {
-
- /** Hostname to use when accessing server */
- private String host;
-
- /** Port to register the service under (defaults to listening port) */
- private String port;
-
- public CseDiscoveryProperties() {
- }
-
- public String getHost() {
- return host;
- }
-
- public void setHost(String host) {
- this.host = host;
- }
-
- public String getPort() {
- return port;
- }
-
- public void setPort(String port) {
- this.port = port;
- }
-}
diff --git a/spring-boot-starter/spring-boot-starter-discovery/src/main/java/ribbon/io/servicecomb/springboot/starter/discovery/CseRibbonClientConfiguration.java b/spring-boot-starter/spring-boot-starter-discovery/src/main/java/io/servicecomb/springboot/starter/discovery/CseRibbonClientConfiguration.java
similarity index 80%
rename from spring-boot-starter/spring-boot-starter-discovery/src/main/java/ribbon/io/servicecomb/springboot/starter/discovery/CseRibbonClientConfiguration.java
rename to spring-boot-starter/spring-boot-starter-discovery/src/main/java/io/servicecomb/springboot/starter/discovery/CseRibbonClientConfiguration.java
index cffa70c..fabb086 100644
--- a/spring-boot-starter/spring-boot-starter-discovery/src/main/java/ribbon/io/servicecomb/springboot/starter/discovery/CseRibbonClientConfiguration.java
+++ b/spring-boot-starter/spring-boot-starter-discovery/src/main/java/io/servicecomb/springboot/starter/discovery/CseRibbonClientConfiguration.java
@@ -1,51 +1,45 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You 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 ribbon.io.servicecomb.springboot.starter.discovery;
-
-import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
-import org.springframework.cloud.netflix.zuul.filters.ZuulProperties;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-
-import com.netflix.client.config.IClientConfig;
-import com.netflix.loadbalancer.Server;
-import com.netflix.loadbalancer.ServerList;
-
-import io.servicecomb.springboot.starter.discovery.CseRoutesProperties;
-import io.servicecomb.springboot.starter.discovery.ServiceCombServerList;
-
-/**
- * Custom {@link org.springframework.cloud.netflix.ribbon.RibbonClient} configuration must not be
- * scanned by spring.
- *
- * @see <a href="http://cloud.spring.io/spring-cloud-static/Camden.SR4/#_customizing_the_ribbon_client">
- * Customizing the Ribbon Client </a>
- */
-@Configuration
-@ConditionalOnBean(ZuulProperties.class)
-public class CseRibbonClientConfiguration {
-
- @Bean
- ServerList<Server> ribbonServerList(
- IClientConfig config,
- CseRoutesProperties cseRoutesProperties) {
-
- ServiceCombServerList serverList = new ServiceCombServerList(cseRoutesProperties);
- serverList.initWithNiwsConfig(config);
- return serverList;
- }
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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 io.servicecomb.springboot.starter.discovery;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
+import org.springframework.cloud.netflix.ribbon.RibbonClientConfiguration;
+import org.springframework.cloud.netflix.zuul.filters.ZuulProperties;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+import com.netflix.client.config.IClientConfig;
+import com.netflix.loadbalancer.Server;
+import com.netflix.loadbalancer.ServerList;
+
+/**
+ * Custom {@link org.springframework.cloud.netflix.ribbon.RibbonClient} configuration must not be
+ * scanned by spring.
+ *
+ * @see <a href="http://cloud.spring.io/spring-cloud-static/Camden.SR4/#_customizing_the_ribbon_client">
+ * Customizing the Ribbon Client </a>
+ */
+public class CseRibbonClientConfiguration {
+ @Bean
+ public ServerList<Server> ribbonServerList(
+ IClientConfig config) {
+ ServiceCombServerList serverList = new ServiceCombServerList();
+ serverList.initWithNiwsConfig(config);
+ return serverList;
+ }
+}
diff --git a/spring-boot-starter/spring-boot-starter-discovery/src/main/java/io/servicecomb/springboot/starter/discovery/RibbonCseAutoConfiguration.java b/spring-boot-starter/spring-boot-starter-discovery/src/main/java/io/servicecomb/springboot/starter/discovery/CseRibbonConfiguration.java
similarity index 92%
rename from spring-boot-starter/spring-boot-starter-discovery/src/main/java/io/servicecomb/springboot/starter/discovery/RibbonCseAutoConfiguration.java
rename to spring-boot-starter/spring-boot-starter-discovery/src/main/java/io/servicecomb/springboot/starter/discovery/CseRibbonConfiguration.java
index ba92c70..deb06d1 100644
--- a/spring-boot-starter/spring-boot-starter-discovery/src/main/java/io/servicecomb/springboot/starter/discovery/RibbonCseAutoConfiguration.java
+++ b/spring-boot-starter/spring-boot-starter-discovery/src/main/java/io/servicecomb/springboot/starter/discovery/CseRibbonConfiguration.java
@@ -1,36 +1,34 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You 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 io.servicecomb.springboot.starter.discovery;
-
-import org.springframework.boot.autoconfigure.AutoConfigureAfter;
-import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
-import org.springframework.boot.context.properties.EnableConfigurationProperties;
-import org.springframework.cloud.netflix.ribbon.RibbonAutoConfiguration;
-import org.springframework.cloud.netflix.ribbon.RibbonClients;
-import org.springframework.cloud.netflix.ribbon.SpringClientFactory;
-import org.springframework.context.annotation.Configuration;
-
-import ribbon.io.servicecomb.springboot.starter.discovery.CseRibbonClientConfiguration;
-
-@Configuration
-@EnableConfigurationProperties
-@ConditionalOnBean(SpringClientFactory.class)
-@AutoConfigureAfter(RibbonAutoConfiguration.class)
-@RibbonClients(defaultConfiguration = CseRibbonClientConfiguration.class)
-public class RibbonCseAutoConfiguration {
-
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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 io.servicecomb.springboot.starter.discovery;
+
+import org.springframework.boot.autoconfigure.AutoConfigureAfter;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
+import org.springframework.boot.context.properties.EnableConfigurationProperties;
+import org.springframework.cloud.netflix.ribbon.RibbonAutoConfiguration;
+import org.springframework.cloud.netflix.ribbon.RibbonClients;
+import org.springframework.cloud.netflix.ribbon.SpringClientFactory;
+import org.springframework.context.annotation.Configuration;
+
+@Configuration
+@EnableConfigurationProperties
+@ConditionalOnBean(SpringClientFactory.class)
+@AutoConfigureAfter(RibbonAutoConfiguration.class)
+@RibbonClients(defaultConfiguration = CseRibbonClientConfiguration.class)
+public class CseRibbonConfiguration {
+
+}
diff --git a/spring-boot-starter/spring-boot-starter-discovery/src/main/java/io/servicecomb/springboot/starter/discovery/CseRoutesProperties.java b/spring-boot-starter/spring-boot-starter-discovery/src/main/java/io/servicecomb/springboot/starter/discovery/CseRoutesProperties.java
deleted file mode 100644
index 15db9b2..0000000
--- a/spring-boot-starter/spring-boot-starter-discovery/src/main/java/io/servicecomb/springboot/starter/discovery/CseRoutesProperties.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You 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 io.servicecomb.springboot.starter.discovery;
-
-import org.springframework.beans.factory.annotation.Autowired;
-
-import io.servicecomb.core.provider.consumer.ConsumerProviderManager;
-import io.servicecomb.core.provider.consumer.ReferenceConfig;
-import io.servicecomb.serviceregistry.RegistryUtils;
-
-public final class CseRoutesProperties {
-
- private final ConsumerProviderManager consumerProviderManager;
-
- @Autowired
- CseRoutesProperties(ConsumerProviderManager consumerProviderManager) {
- this.consumerProviderManager = consumerProviderManager;
- }
-
- String getVersionRule(String serviceName) {
- ReferenceConfig referenceConfig = consumerProviderManager.getReferenceConfig(serviceName);
- return referenceConfig.getMicroserviceVersionRule();
- }
-
- String getAppID() {
- return RegistryUtils.getAppId();
- }
-}
diff --git a/spring-boot-starter/spring-boot-starter-discovery/src/main/java/io/servicecomb/springboot/starter/discovery/CseServerListCacheWrapper.java b/spring-boot-starter/spring-boot-starter-discovery/src/main/java/io/servicecomb/springboot/starter/discovery/CseServerListCacheWrapper.java
deleted file mode 100644
index 73f2c9d..0000000
--- a/spring-boot-starter/spring-boot-starter-discovery/src/main/java/io/servicecomb/springboot/starter/discovery/CseServerListCacheWrapper.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You 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 io.servicecomb.springboot.starter.discovery;
-
-import com.netflix.loadbalancer.Server;
-
-import io.servicecomb.core.Transport;
-import io.servicecomb.loadbalance.ServerListCache;
-import io.servicecomb.serviceregistry.cache.CacheEndpoint;
-
-public class CseServerListCacheWrapper extends ServerListCache {
-
- public CseServerListCacheWrapper(String appId, String microserviceName, String microserviceVersionRule,
- String transportName) {
- super(appId, microserviceName, microserviceVersionRule, transportName);
- }
-
- @Override
- protected Server createEndpoint(Transport transport, CacheEndpoint cacheEndpoint) {
- return new CseServerWrapper(transport, cacheEndpoint);
- }
-}
diff --git a/spring-boot-starter/spring-boot-starter-discovery/src/main/java/io/servicecomb/springboot/starter/discovery/CseServerWrapper.java b/spring-boot-starter/spring-boot-starter-discovery/src/main/java/io/servicecomb/springboot/starter/discovery/CseServerWrapper.java
deleted file mode 100644
index b3d7c6c..0000000
--- a/spring-boot-starter/spring-boot-starter-discovery/src/main/java/io/servicecomb/springboot/starter/discovery/CseServerWrapper.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You 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 io.servicecomb.springboot.starter.discovery;
-
-import io.servicecomb.core.Transport;
-import io.servicecomb.foundation.common.net.URIEndpointObject;
-import io.servicecomb.loadbalance.CseServer;
-import io.servicecomb.serviceregistry.cache.CacheEndpoint;
-
-public class CseServerWrapper extends CseServer {
-
- public CseServerWrapper(Transport transport, CacheEndpoint cacheEndpoint) {
- super(transport, cacheEndpoint);
- }
-
- // used in LoadBalancerContext
- public String getHost() {
- URIEndpointObject host = (URIEndpointObject) getEndpoint().getAddress();
- return host.getHostOrIp();
- }
-
- public int getPort() {
- URIEndpointObject host = (URIEndpointObject) getEndpoint().getAddress();
- return host.getPort();
- }
-}
diff --git a/spring-boot-starter/spring-boot-starter-discovery/src/main/java/io/servicecomb/springboot/starter/discovery/ServiceCombDiscoveryException.java b/spring-boot-starter/spring-boot-starter-discovery/src/main/java/io/servicecomb/springboot/starter/discovery/ServiceCombDiscoveryException.java
deleted file mode 100644
index 4848513..0000000
--- a/spring-boot-starter/spring-boot-starter-discovery/src/main/java/io/servicecomb/springboot/starter/discovery/ServiceCombDiscoveryException.java
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You 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 io.servicecomb.springboot.starter.discovery;
-
-public class ServiceCombDiscoveryException extends RuntimeException {
- private static final long serialVersionUID = 3806741463767943277L;
-
- public ServiceCombDiscoveryException(String message) {
- super(message);
- }
-}
diff --git a/spring-boot-starter/spring-boot-starter-discovery/src/main/java/io/servicecomb/springboot/starter/discovery/ServiceCombServerList.java b/spring-boot-starter/spring-boot-starter-discovery/src/main/java/io/servicecomb/springboot/starter/discovery/ServiceCombServerList.java
index 74f0ba5..5edb8e5 100644
--- a/spring-boot-starter/spring-boot-starter-discovery/src/main/java/io/servicecomb/springboot/starter/discovery/ServiceCombServerList.java
+++ b/spring-boot-starter/spring-boot-starter-discovery/src/main/java/io/servicecomb/springboot/starter/discovery/ServiceCombServerList.java
@@ -16,65 +16,57 @@
*/
package io.servicecomb.springboot.starter.discovery;
+import java.util.ArrayList;
import java.util.List;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import java.util.Map;
import com.netflix.client.config.IClientConfig;
import com.netflix.loadbalancer.AbstractServerList;
import com.netflix.loadbalancer.Server;
-import io.servicecomb.loadbalance.ServerListCache;
+import io.servicecomb.foundation.common.cache.VersionedCache;
+import io.servicecomb.foundation.common.net.URIEndpointObject;
+import io.servicecomb.serviceregistry.RegistryUtils;
+import io.servicecomb.serviceregistry.api.registry.MicroserviceInstance;
+import io.servicecomb.serviceregistry.definition.DefinitionConst;
+import io.servicecomb.serviceregistry.discovery.DiscoveryContext;
+import io.servicecomb.serviceregistry.discovery.DiscoveryTree;
public class ServiceCombServerList extends AbstractServerList<Server> {
- private static final Logger logger = LoggerFactory.getLogger(ServiceCombServerList.class);
-
- private final CseRoutesProperties config;
-
- private ServerListCache serverListCache;
+ private DiscoveryTree discoveryTree = new DiscoveryTree();
private String serviceId;
- public ServiceCombServerList(CseRoutesProperties config) {
- this.config = config;
+ public ServiceCombServerList() {
}
@Override
public List<Server> getInitialListOfServers() {
- return servers();
+ DiscoveryContext context = new DiscoveryContext();
+ context.setInputParameters(serviceId);
+ VersionedCache serversVersionedCache = discoveryTree.discovery(context,
+ RegistryUtils.getAppId(),
+ serviceId,
+ DefinitionConst.VERSION_RULE_ALL);
+ Map<String, MicroserviceInstance> servers = serversVersionedCache.data();
+ List<Server> instances = new ArrayList<>(servers.size());
+ for (MicroserviceInstance s : servers.values()) {
+ for (String endpoint : s.getEndpoints()) {
+ URIEndpointObject uri = new URIEndpointObject(endpoint);
+ instances.add(new Server(uri.getHostOrIp(), uri.getPort()));
+ }
+ }
+ return instances;
}
@Override
public List<Server> getUpdatedListOfServers() {
- return servers();
- }
-
- private List<Server> servers() {
- if (serverListCache == null) {
- throw new ServiceCombDiscoveryException("Service list is not initialized");
- }
-
- logger.info("Looking for service with app id: {}, service id: {}, version rule: {}",
- config.getAppID(),
- serviceId,
- config.getVersionRule(serviceId));
-
- List<Server> endpoints = serverListCache.getLatestEndpoints();
-
- logger.info("Found service endpoints {}", endpoints);
- return endpoints;
+ return getInitialListOfServers();
}
@Override
public void initWithNiwsConfig(IClientConfig iClientConfig) {
- serviceId = iClientConfig.getClientName();
-
- serverListCache = new CseServerListCacheWrapper(
- config.getAppID(),
- serviceId,
- config.getVersionRule(serviceId),
- "rest");
+ this.serviceId = iClientConfig.getClientName();
}
}
diff --git a/spring-boot-starter/spring-boot-starter-discovery/src/main/resources/META-INF/spring.factories b/spring-boot-starter/spring-boot-starter-discovery/src/main/resources/META-INF/spring.factories
index 6f7488c..f0f5612 100644
--- a/spring-boot-starter/spring-boot-starter-discovery/src/main/resources/META-INF/spring.factories
+++ b/spring-boot-starter/spring-boot-starter-discovery/src/main/resources/META-INF/spring.factories
@@ -17,4 +17,8 @@
io.servicecomb.springboot.starter.provider.EnableServiceComb=\
io.servicecomb.springboot.starter.discovery.CseDiscoveryClientConfiguration,\
- io.servicecomb.springboot.starter.discovery.RibbonCseAutoConfiguration
+ io.servicecomb.springboot.starter.discovery.CseRibbonConfiguration
+org.springframework.cloud.client.discovery.EnableDiscoveryClient=\
+ io.servicecomb.springboot.starter.discovery.CseDiscoveryClientConfiguration
+org.springframework.cloud.netflix.ribbon.RibbonClient=\
+ io.servicecomb.springboot.starter.discovery.CseRibbonConfiguration
\ No newline at end of file
diff --git a/spring-boot-starter/spring-boot-starter-discovery/src/test/java/io/servicecomb/springboot/starter/discovery/ServiceCombServerListTest.java b/spring-boot-starter/spring-boot-starter-discovery/src/test/java/io/servicecomb/springboot/starter/discovery/ServiceCombServerListTest.java
deleted file mode 100644
index 47c9650..0000000
--- a/spring-boot-starter/spring-boot-starter-discovery/src/test/java/io/servicecomb/springboot/starter/discovery/ServiceCombServerListTest.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You 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 io.servicecomb.springboot.starter.discovery;
-
-import static com.seanyinx.github.unit.scaffolding.AssertUtils.expectFailing;
-import static io.servicecomb.core.Const.DEFAULT_VERSION_RULE;
-import static org.hamcrest.core.Is.is;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.when;
-
-import org.junit.Assert;
-import org.junit.Before;
-import org.junit.Test;
-
-import com.seanyinx.github.unit.scaffolding.Randomness;
-
-import io.servicecomb.core.provider.consumer.ConsumerProviderManager;
-import io.servicecomb.core.provider.consumer.ReferenceConfig;
-
-public class ServiceCombServerListTest {
-
- private final ReferenceConfig referenceConfig = mock(ReferenceConfig.class);
-
- private final ConsumerProviderManager manager = mock(ConsumerProviderManager.class);
-
- private final CseRoutesProperties properties = new CseRoutesProperties(manager);
-
- private final ServiceCombServerList serverList = new ServiceCombServerList(properties);
-
- private String serviceId = Randomness.uniquify("serviceId");
-
- @Before
- public void setUp() throws Exception {
- when(manager.getReferenceConfig(serviceId)).thenReturn(referenceConfig);
- when(referenceConfig.getMicroserviceVersionRule()).thenReturn(DEFAULT_VERSION_RULE);
- }
-
- @Test
- public void blowsUpWhenServerListNotInitialized() {
- try {
- serverList.getInitialListOfServers();
- expectFailing(ServiceCombDiscoveryException.class);
- } catch (ServiceCombDiscoveryException e) {
- Assert.assertThat(e.getMessage(), is("Service list is not initialized"));
- }
- }
-}
diff --git a/spring-boot-starter/spring-boot-starter-discovery/src/test/java/io/servicecomb/springboot/starter/discovery/TestCseDiscoveryClient.java b/spring-boot-starter/spring-boot-starter-discovery/src/test/java/io/servicecomb/springboot/starter/discovery/TestCseDiscoveryClient.java
new file mode 100644
index 0000000..511ee0b
--- /dev/null
+++ b/spring-boot-starter/spring-boot-starter-discovery/src/test/java/io/servicecomb/springboot/starter/discovery/TestCseDiscoveryClient.java
@@ -0,0 +1,68 @@
+package io.servicecomb.springboot.starter.discovery;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.junit.Assert;
+import org.junit.Test;
+import org.springframework.cloud.client.discovery.DiscoveryClient;
+
+import io.servicecomb.serviceregistry.RegistryUtils;
+import io.servicecomb.serviceregistry.api.registry.Microservice;
+import io.servicecomb.serviceregistry.api.registry.MicroserviceInstance;
+import io.servicecomb.serviceregistry.client.ServiceRegistryClient;
+import io.servicecomb.serviceregistry.discovery.DiscoveryContext;
+import io.servicecomb.serviceregistry.discovery.DiscoveryTree;
+import io.servicecomb.serviceregistry.discovery.DiscoveryTreeNode;
+import mockit.Expectations;
+import mockit.Injectable;
+import mockit.Mocked;
+
+public class TestCseDiscoveryClient {
+ @Test
+ public void testCseDiscoveryClient(@Mocked RegistryUtils registryUtils,
+ @Injectable ServiceRegistryClient serviceRegistryClient,
+ @Mocked DiscoveryTree discoveryTree,
+ @Injectable DiscoveryTreeNode versionedCache) {
+ List<Microservice> microserviceList = new ArrayList<>();
+ Microservice service1 = new Microservice();
+ service1.setServiceName("service1");
+ microserviceList.add(service1);
+ Microservice server2 = new Microservice();
+ microserviceList.add(server2);
+ server2.setServiceName("server2");
+
+ Map<String, MicroserviceInstance> servers = new HashMap<>();
+ List<String> endpoints = new ArrayList<>();
+ endpoints.add("rest://localhost:3333");
+ endpoints.add("rest://localhost:4444");
+ MicroserviceInstance instance1 = new MicroserviceInstance();
+ instance1.setServiceId("service1");
+ instance1.setInstanceId("service1-instance1");
+ instance1.setEndpoints(endpoints);
+ servers.put("service1-instance1", instance1);
+
+ new Expectations() {
+ {
+ RegistryUtils.getServiceRegistryClient();
+ result = serviceRegistryClient;
+ serviceRegistryClient.getAllMicroservices();
+ result = microserviceList;
+ discoveryTree.discovery((DiscoveryContext) any, anyString, anyString, anyString);
+ result = versionedCache;
+ versionedCache.data();
+ result = servers;
+ }
+ };
+
+ DiscoveryClient client = new CseDiscoveryClient();
+ Assert.assertEquals("Spring Cloud CSE Discovery Client", client.description());
+ Assert.assertEquals(null, client.getLocalServiceInstance());
+ Assert.assertEquals(2, client.getServices().size());
+ Assert.assertEquals("server2", client.getServices().get(1));
+ Assert.assertEquals(2, client.getInstances("service1-instance1").size());
+ Assert.assertEquals(4444, client.getInstances("service1-instance1").get(1).getPort());
+ }
+}
diff --git a/spring-boot-starter/spring-boot-starter-discovery/src/test/java/io/servicecomb/springboot/starter/discovery/TestServiceCombServerList.java b/spring-boot-starter/spring-boot-starter-discovery/src/test/java/io/servicecomb/springboot/starter/discovery/TestServiceCombServerList.java
new file mode 100644
index 0000000..a1eb68e
--- /dev/null
+++ b/spring-boot-starter/spring-boot-starter-discovery/src/test/java/io/servicecomb/springboot/starter/discovery/TestServiceCombServerList.java
@@ -0,0 +1,59 @@
+package io.servicecomb.springboot.starter.discovery;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.junit.Assert;
+import org.junit.Test;
+
+import com.netflix.client.config.IClientConfig;
+import com.netflix.loadbalancer.Server;
+
+import io.servicecomb.serviceregistry.RegistryUtils;
+import io.servicecomb.serviceregistry.api.registry.MicroserviceInstance;
+import io.servicecomb.serviceregistry.discovery.DiscoveryContext;
+import io.servicecomb.serviceregistry.discovery.DiscoveryTree;
+import io.servicecomb.serviceregistry.discovery.DiscoveryTreeNode;
+import mockit.Expectations;
+import mockit.Injectable;
+import mockit.Mocked;
+
+public class TestServiceCombServerList {
+ @Test
+ public void testServiceCombServerList(@Injectable IClientConfig iClientConfig,
+ @Mocked RegistryUtils registryUtils,
+ @Mocked DiscoveryTree discoveryTree,
+ @Injectable DiscoveryTreeNode versionedCache) {
+ Map<String, MicroserviceInstance> servers = new HashMap<>();
+ List<String> endpoints = new ArrayList<>();
+ endpoints.add("rest://localhost:3333");
+ endpoints.add("rest://localhost:4444");
+ MicroserviceInstance instance1 = new MicroserviceInstance();
+ instance1.setServiceId("service1");
+ instance1.setInstanceId("service1-instance1");
+ instance1.setEndpoints(endpoints);
+ servers.put("service1-instance1", instance1);
+
+ new Expectations() {
+ {
+ iClientConfig.getClientName();
+ result = "serviceId1";
+
+ RegistryUtils.getAppId();
+ result = "app";
+ discoveryTree.discovery((DiscoveryContext) any, anyString, anyString, anyString);
+ result = versionedCache;
+ versionedCache.data();
+ result = servers;
+ }
+ };
+
+ ServiceCombServerList list = new ServiceCombServerList();
+ list.initWithNiwsConfig(iClientConfig);
+ List<Server> serverList = list.getInitialListOfServers();
+ Assert.assertEquals(2, serverList.size());
+ Assert.assertEquals(4444, serverList.get(1).getPort());
+ }
+}
--
To stop receiving notification emails like this one, please contact
"commits@servicecomb.apache.org" <co...@servicecomb.apache.org>.