diff --git a/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/autoconfigure/DubboServiceDiscoveryAutoConfiguration.java b/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/autoconfigure/DubboServiceDiscoveryAutoConfiguration.java
index ee1804b5b..b9ee12be9 100644
--- a/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/autoconfigure/DubboServiceDiscoveryAutoConfiguration.java
+++ b/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/autoconfigure/DubboServiceDiscoveryAutoConfiguration.java
@@ -83,7 +83,7 @@ import static com.alibaba.cloud.dubbo.autoconfigure.DubboServiceDiscoveryAutoCon
import static com.alibaba.cloud.dubbo.autoconfigure.DubboServiceDiscoveryAutoConfiguration.NACOS_DISCOVERY_AUTO_CONFIGURATION_CLASS_NAME;
import static com.alibaba.cloud.dubbo.autoconfigure.DubboServiceDiscoveryAutoConfiguration.ZOOKEEPER_DISCOVERY_AUTO_CONFIGURATION_CLASS_NAME;
import static com.alibaba.cloud.dubbo.autoconfigure.DubboServiceRegistrationAutoConfiguration.EUREKA_CLIENT_AUTO_CONFIGURATION_CLASS_NAME;
-import static com.alibaba.cloud.nacos.discovery.NacosDiscoveryClient.hostToServiceInstanceList;
+import static com.alibaba.cloud.nacos.discovery.NacosServiceDiscovery.hostToServiceInstanceList;
import static org.springframework.util.StringUtils.hasText;
/**
diff --git a/spring-cloud-alibaba-nacos-discovery/pom.xml b/spring-cloud-alibaba-nacos-discovery/pom.xml
index f061ce226..968267718 100644
--- a/spring-cloud-alibaba-nacos-discovery/pom.xml
+++ b/spring-cloud-alibaba-nacos-discovery/pom.xml
@@ -81,6 +81,13 @@
spring-boot-starter-web
test
+
+
+ org.springframework.boot
+ spring-boot-starter-webflux
+ true
+
+
org.springframework.boot
spring-boot-starter-test
@@ -91,6 +98,11 @@
spring-cloud-test-support
test
+
+ io.projectreactor
+ reactor-test
+ test
+
diff --git a/spring-cloud-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/discovery/NacosDiscoveryAutoConfiguration.java b/spring-cloud-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/discovery/NacosDiscoveryAutoConfiguration.java
new file mode 100644
index 000000000..e6c594242
--- /dev/null
+++ b/spring-cloud-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/discovery/NacosDiscoveryAutoConfiguration.java
@@ -0,0 +1,55 @@
+/*
+ * Copyright 2013-2018 the original author or authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://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 com.alibaba.cloud.nacos.discovery;
+
+import com.alibaba.cloud.nacos.ConditionalOnNacosDiscoveryEnabled;
+import com.alibaba.cloud.nacos.NacosDiscoveryProperties;
+import com.alibaba.cloud.nacos.NacosNamingManager;
+
+import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
+import org.springframework.cloud.client.ConditionalOnDiscoveryEnabled;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+/**
+ * @author echooymxq
+ **/
+@Configuration
+@ConditionalOnDiscoveryEnabled
+@ConditionalOnNacosDiscoveryEnabled
+public class NacosDiscoveryAutoConfiguration {
+
+ @Bean
+ public NacosNamingManager nacosNamingManager() {
+ return new NacosNamingManager();
+ }
+
+ @Bean
+ @ConditionalOnMissingBean
+ public NacosDiscoveryProperties nacosProperties() {
+ return new NacosDiscoveryProperties();
+ }
+
+ @Bean
+ @ConditionalOnMissingBean
+ public NacosServiceDiscovery nacosServiceDiscovery(
+ NacosNamingManager nacosNamingManager,
+ NacosDiscoveryProperties discoveryProperties) {
+ return new NacosServiceDiscovery(nacosNamingManager, discoveryProperties);
+ }
+
+}
diff --git a/spring-cloud-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/discovery/NacosDiscoveryClient.java b/spring-cloud-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/discovery/NacosDiscoveryClient.java
index 852cc07b1..d446e2921 100644
--- a/spring-cloud-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/discovery/NacosDiscoveryClient.java
+++ b/spring-cloud-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/discovery/NacosDiscoveryClient.java
@@ -16,17 +16,9 @@
package com.alibaba.cloud.nacos.discovery;
-import java.util.ArrayList;
import java.util.Collections;
-import java.util.HashMap;
import java.util.List;
-import java.util.Map;
-import com.alibaba.cloud.nacos.NacosDiscoveryProperties;
-import com.alibaba.cloud.nacos.NacosNamingManager;
-import com.alibaba.cloud.nacos.NacosServiceInstance;
-import com.alibaba.nacos.api.naming.pojo.Instance;
-import com.alibaba.nacos.api.naming.pojo.ListView;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -36,6 +28,7 @@ import org.springframework.cloud.client.discovery.DiscoveryClient;
/**
* @author xiaojing
* @author renhaojun
+ * @author echooymxq
*/
public class NacosDiscoveryClient implements DiscoveryClient {
@@ -46,14 +39,10 @@ public class NacosDiscoveryClient implements DiscoveryClient {
*/
public static final String DESCRIPTION = "Spring Cloud Nacos Discovery Client";
- private NacosNamingManager nacosNamingManager;
+ private NacosServiceDiscovery serviceDiscovery;
- private NacosDiscoveryProperties discoveryProperties;
-
- public NacosDiscoveryClient(NacosNamingManager nacosNamingManager,
- NacosDiscoveryProperties discoveryProperties) {
- this.nacosNamingManager = nacosNamingManager;
- this.discoveryProperties = discoveryProperties;
+ public NacosDiscoveryClient(NacosServiceDiscovery nacosServiceDiscovery) {
+ this.serviceDiscovery = nacosServiceDiscovery;
}
@Override
@@ -64,10 +53,7 @@ public class NacosDiscoveryClient implements DiscoveryClient {
@Override
public List getInstances(String serviceId) {
try {
- String group = discoveryProperties.getGroup();
- List instances = nacosNamingManager.getNamingService()
- .selectInstances(serviceId, group, true);
- return hostToServiceInstanceList(instances, serviceId);
+ return serviceDiscovery.getInstances(serviceId);
}
catch (Exception e) {
throw new RuntimeException(
@@ -75,51 +61,10 @@ public class NacosDiscoveryClient implements DiscoveryClient {
}
}
- public static ServiceInstance hostToServiceInstance(Instance instance,
- String serviceId) {
- if (instance == null || !instance.isEnabled() || !instance.isHealthy()) {
- return null;
- }
- NacosServiceInstance nacosServiceInstance = new NacosServiceInstance();
- nacosServiceInstance.setHost(instance.getIp());
- nacosServiceInstance.setPort(instance.getPort());
- nacosServiceInstance.setServiceId(serviceId);
-
- Map metadata = new HashMap<>();
- metadata.put("nacos.instanceId", instance.getInstanceId());
- metadata.put("nacos.weight", instance.getWeight() + "");
- metadata.put("nacos.healthy", instance.isHealthy() + "");
- metadata.put("nacos.cluster", instance.getClusterName() + "");
- metadata.putAll(instance.getMetadata());
- nacosServiceInstance.setMetadata(metadata);
-
- if (metadata.containsKey("secure")) {
- boolean secure = Boolean.parseBoolean(metadata.get("secure"));
- nacosServiceInstance.setSecure(secure);
- }
- return nacosServiceInstance;
- }
-
- public static List hostToServiceInstanceList(
- List instances, String serviceId) {
- List result = new ArrayList<>(instances.size());
- for (Instance instance : instances) {
- ServiceInstance serviceInstance = hostToServiceInstance(instance, serviceId);
- if (serviceInstance != null) {
- result.add(serviceInstance);
- }
- }
- return result;
- }
-
@Override
public List getServices() {
-
try {
- String group = discoveryProperties.getGroup();
- ListView services = nacosNamingManager.getNamingService()
- .getServicesOfServer(1, Integer.MAX_VALUE, group);
- return services.getData();
+ return serviceDiscovery.getServices();
}
catch (Exception e) {
log.error("get service name from nacos server fail,", e);
diff --git a/spring-cloud-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/discovery/NacosDiscoveryClientAutoConfiguration.java b/spring-cloud-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/discovery/NacosDiscoveryClientConfiguration.java
similarity index 76%
rename from spring-cloud-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/discovery/NacosDiscoveryClientAutoConfiguration.java
rename to spring-cloud-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/discovery/NacosDiscoveryClientConfiguration.java
index da0411390..322431ba8 100644
--- a/spring-cloud-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/discovery/NacosDiscoveryClientAutoConfiguration.java
+++ b/spring-cloud-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/discovery/NacosDiscoveryClientConfiguration.java
@@ -18,12 +18,14 @@ package com.alibaba.cloud.nacos.discovery;
import com.alibaba.cloud.nacos.ConditionalOnNacosDiscoveryEnabled;
import com.alibaba.cloud.nacos.NacosDiscoveryProperties;
-import com.alibaba.cloud.nacos.NacosNamingManager;
+import org.springframework.boot.autoconfigure.AutoConfigureAfter;
import org.springframework.boot.autoconfigure.AutoConfigureBefore;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.cloud.client.CommonsClientAutoConfiguration;
+import org.springframework.cloud.client.ConditionalOnBlockingDiscoveryEnabled;
+import org.springframework.cloud.client.ConditionalOnDiscoveryEnabled;
import org.springframework.cloud.client.discovery.DiscoveryClient;
import org.springframework.cloud.client.discovery.simple.SimpleDiscoveryClientAutoConfiguration;
import org.springframework.context.annotation.Bean;
@@ -31,23 +33,21 @@ import org.springframework.context.annotation.Configuration;
/**
* @author xiaojing
+ * @author echooymxq
*/
@Configuration
+@ConditionalOnDiscoveryEnabled
+@ConditionalOnBlockingDiscoveryEnabled
@ConditionalOnNacosDiscoveryEnabled
@AutoConfigureBefore({ SimpleDiscoveryClientAutoConfiguration.class,
CommonsClientAutoConfiguration.class })
-public class NacosDiscoveryClientAutoConfiguration {
+@AutoConfigureAfter(NacosDiscoveryAutoConfiguration.class)
+public class NacosDiscoveryClientConfiguration {
@Bean
- @ConditionalOnMissingBean
- public NacosDiscoveryProperties nacosProperties() {
- return new NacosDiscoveryProperties();
- }
-
- @Bean
- public DiscoveryClient nacosDiscoveryClient(NacosNamingManager nacosNamingManager,
- NacosDiscoveryProperties discoveryProperties) {
- return new NacosDiscoveryClient(nacosNamingManager, discoveryProperties);
+ public DiscoveryClient nacosDiscoveryClient(
+ NacosServiceDiscovery nacosServiceDiscovery) {
+ return new NacosDiscoveryClient(nacosServiceDiscovery);
}
@Bean
diff --git a/spring-cloud-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/discovery/NacosServiceDiscovery.java b/spring-cloud-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/discovery/NacosServiceDiscovery.java
new file mode 100644
index 000000000..e9fe729a1
--- /dev/null
+++ b/spring-cloud-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/discovery/NacosServiceDiscovery.java
@@ -0,0 +1,110 @@
+/*
+ * Copyright 2013-2018 the original author or authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://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 com.alibaba.cloud.nacos.discovery;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import com.alibaba.cloud.nacos.NacosDiscoveryProperties;
+import com.alibaba.cloud.nacos.NacosNamingManager;
+import com.alibaba.cloud.nacos.NacosServiceInstance;
+import com.alibaba.nacos.api.exception.NacosException;
+import com.alibaba.nacos.api.naming.pojo.Instance;
+import com.alibaba.nacos.api.naming.pojo.ListView;
+
+import org.springframework.cloud.client.ServiceInstance;
+
+/**
+ * @author echooymxq
+ **/
+public class NacosServiceDiscovery {
+
+ private NacosNamingManager nacosNamingManager;
+
+ private NacosDiscoveryProperties discoveryProperties;
+
+ public NacosServiceDiscovery(NacosNamingManager nacosNamingManager,
+ NacosDiscoveryProperties discoveryProperties) {
+ this.nacosNamingManager = nacosNamingManager;
+ this.discoveryProperties = discoveryProperties;
+ }
+
+ /**
+ * Return all instances for the given service.
+ * @param serviceId id of service
+ * @return list of instances
+ * @throws NacosException nacosException
+ */
+ public List getInstances(String serviceId) throws NacosException {
+ String group = discoveryProperties.getGroup();
+ List instances = nacosNamingManager.getNamingService()
+ .selectInstances(serviceId, group, true);
+ return hostToServiceInstanceList(instances, serviceId);
+ }
+
+ /**
+ * Return the names of all services.
+ * @return list of service names
+ * @throws NacosException nacosException
+ */
+ public List getServices() throws NacosException {
+ String group = discoveryProperties.getGroup();
+ ListView services = nacosNamingManager.getNamingService()
+ .getServicesOfServer(1, Integer.MAX_VALUE, group);
+ return services.getData();
+ }
+
+ public static List hostToServiceInstanceList(
+ List instances, String serviceId) {
+ List result = new ArrayList<>(instances.size());
+ for (Instance instance : instances) {
+ ServiceInstance serviceInstance = hostToServiceInstance(instance, serviceId);
+ if (serviceInstance != null) {
+ result.add(serviceInstance);
+ }
+ }
+ return result;
+ }
+
+ public static ServiceInstance hostToServiceInstance(Instance instance,
+ String serviceId) {
+ if (instance == null || !instance.isEnabled() || !instance.isHealthy()) {
+ return null;
+ }
+ NacosServiceInstance nacosServiceInstance = new NacosServiceInstance();
+ nacosServiceInstance.setHost(instance.getIp());
+ nacosServiceInstance.setPort(instance.getPort());
+ nacosServiceInstance.setServiceId(serviceId);
+
+ Map metadata = new HashMap<>();
+ metadata.put("nacos.instanceId", instance.getInstanceId());
+ metadata.put("nacos.weight", instance.getWeight() + "");
+ metadata.put("nacos.healthy", instance.isHealthy() + "");
+ metadata.put("nacos.cluster", instance.getClusterName() + "");
+ metadata.putAll(instance.getMetadata());
+ nacosServiceInstance.setMetadata(metadata);
+
+ if (metadata.containsKey("secure")) {
+ boolean secure = Boolean.parseBoolean(metadata.get("secure"));
+ nacosServiceInstance.setSecure(secure);
+ }
+ return nacosServiceInstance;
+ }
+
+}
diff --git a/spring-cloud-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/discovery/configclient/NacosDiscoveryClientConfigServiceBootstrapConfiguration.java b/spring-cloud-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/discovery/configclient/NacosDiscoveryClientConfigServiceBootstrapConfiguration.java
index ac4671821..73a01d937 100644
--- a/spring-cloud-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/discovery/configclient/NacosDiscoveryClientConfigServiceBootstrapConfiguration.java
+++ b/spring-cloud-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/discovery/configclient/NacosDiscoveryClientConfigServiceBootstrapConfiguration.java
@@ -16,8 +16,9 @@
package com.alibaba.cloud.nacos.discovery.configclient;
-import com.alibaba.cloud.nacos.NacosDiscoveryAutoConfiguration;
-import com.alibaba.cloud.nacos.discovery.NacosDiscoveryClientAutoConfiguration;
+import com.alibaba.cloud.nacos.discovery.NacosDiscoveryAutoConfiguration;
+import com.alibaba.cloud.nacos.discovery.NacosDiscoveryClientConfiguration;
+import com.alibaba.cloud.nacos.discovery.reactive.NacosReactiveDiscoveryClientConfiguration;
import org.springframework.boot.autoconfigure.ImportAutoConfiguration;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
@@ -34,8 +35,9 @@ import org.springframework.context.annotation.Configuration;
@ConditionalOnProperty(value = "spring.cloud.config.discovery.enabled",
matchIfMissing = false)
@Configuration
-@ImportAutoConfiguration({ NacosDiscoveryClientAutoConfiguration.class,
- NacosDiscoveryAutoConfiguration.class })
+@ImportAutoConfiguration({ NacosDiscoveryAutoConfiguration.class,
+ NacosDiscoveryClientConfiguration.class,
+ NacosReactiveDiscoveryClientConfiguration.class })
public class NacosDiscoveryClientConfigServiceBootstrapConfiguration {
}
diff --git a/spring-cloud-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/discovery/reactive/NacosReactiveDiscoveryClient.java b/spring-cloud-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/discovery/reactive/NacosReactiveDiscoveryClient.java
new file mode 100644
index 000000000..d31704c75
--- /dev/null
+++ b/spring-cloud-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/discovery/reactive/NacosReactiveDiscoveryClient.java
@@ -0,0 +1,82 @@
+/*
+ * Copyright 2013-2018 the original author or authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://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 com.alibaba.cloud.nacos.discovery.reactive;
+
+import java.util.function.Function;
+
+import com.alibaba.cloud.nacos.discovery.NacosServiceDiscovery;
+import com.alibaba.nacos.api.exception.NacosException;
+import org.reactivestreams.Publisher;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import reactor.core.publisher.Flux;
+import reactor.core.publisher.Mono;
+
+import org.springframework.cloud.client.ServiceInstance;
+import org.springframework.cloud.client.discovery.ReactiveDiscoveryClient;
+
+/**
+ * @author echooymxq
+ **/
+public class NacosReactiveDiscoveryClient implements ReactiveDiscoveryClient {
+
+ private static final Logger log = LoggerFactory
+ .getLogger(NacosReactiveDiscoveryClient.class);
+
+ private NacosServiceDiscovery serviceDiscovery;
+
+ public NacosReactiveDiscoveryClient(NacosServiceDiscovery nacosServiceDiscovery) {
+ this.serviceDiscovery = nacosServiceDiscovery;
+ }
+
+ @Override
+ public String description() {
+ return "Spring Cloud Nacos Reactive Discovery Client";
+ }
+
+ @Override
+ public Flux getInstances(String serviceId) {
+
+ return Mono.justOrEmpty(serviceId).flatMapMany(loadInstancesFromNacos());
+ }
+
+ private Function> loadInstancesFromNacos() {
+ return serviceId -> {
+ try {
+ return Flux.fromIterable(serviceDiscovery.getInstances(serviceId));
+ }
+ catch (NacosException e) {
+ log.error("get service instance[{}] from nacos error!", serviceId, e);
+ return Flux.empty();
+ }
+ };
+ }
+
+ @Override
+ public Flux getServices() {
+ return Flux.defer(() -> {
+ try {
+ return Flux.fromIterable(serviceDiscovery.getServices());
+ }
+ catch (Exception e) {
+ log.error("get services from nacos server fail,", e);
+ return Flux.empty();
+ }
+ });
+ }
+
+}
diff --git a/spring-cloud-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/discovery/reactive/NacosReactiveDiscoveryClientConfiguration.java b/spring-cloud-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/discovery/reactive/NacosReactiveDiscoveryClientConfiguration.java
new file mode 100644
index 000000000..96c327676
--- /dev/null
+++ b/spring-cloud-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/discovery/reactive/NacosReactiveDiscoveryClientConfiguration.java
@@ -0,0 +1,52 @@
+/*
+ * Copyright 2013-2018 the original author or authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://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 com.alibaba.cloud.nacos.discovery.reactive;
+
+import com.alibaba.cloud.nacos.ConditionalOnNacosDiscoveryEnabled;
+import com.alibaba.cloud.nacos.discovery.NacosDiscoveryAutoConfiguration;
+import com.alibaba.cloud.nacos.discovery.NacosServiceDiscovery;
+
+import org.springframework.boot.autoconfigure.AutoConfigureAfter;
+import org.springframework.boot.autoconfigure.AutoConfigureBefore;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
+import org.springframework.cloud.client.ConditionalOnDiscoveryEnabled;
+import org.springframework.cloud.client.ConditionalOnReactiveDiscoveryEnabled;
+import org.springframework.cloud.client.ReactiveCommonsClientAutoConfiguration;
+import org.springframework.cloud.client.discovery.composite.reactive.ReactiveCompositeDiscoveryClientAutoConfiguration;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+/**
+ * @author echooymxq
+ **/
+@Configuration
+@ConditionalOnDiscoveryEnabled
+@ConditionalOnReactiveDiscoveryEnabled
+@ConditionalOnNacosDiscoveryEnabled
+@AutoConfigureAfter({ NacosDiscoveryAutoConfiguration.class,
+ ReactiveCompositeDiscoveryClientAutoConfiguration.class })
+@AutoConfigureBefore({ ReactiveCommonsClientAutoConfiguration.class })
+public class NacosReactiveDiscoveryClientConfiguration {
+
+ @Bean
+ @ConditionalOnMissingBean
+ public NacosReactiveDiscoveryClient nacosReactiveDiscoveryClient(
+ NacosServiceDiscovery nacosServiceDiscovery) {
+ return new NacosReactiveDiscoveryClient(nacosServiceDiscovery);
+ }
+
+}
diff --git a/spring-cloud-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/NacosDiscoveryAutoConfiguration.java b/spring-cloud-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/registry/NacosServiceRegistryAutoConfiguration.java
similarity index 86%
rename from spring-cloud-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/NacosDiscoveryAutoConfiguration.java
rename to spring-cloud-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/registry/NacosServiceRegistryAutoConfiguration.java
index 2e6c08589..a9403c746 100644
--- a/spring-cloud-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/NacosDiscoveryAutoConfiguration.java
+++ b/spring-cloud-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/registry/NacosServiceRegistryAutoConfiguration.java
@@ -14,11 +14,12 @@
* limitations under the License.
*/
-package com.alibaba.cloud.nacos;
+package com.alibaba.cloud.nacos.registry;
-import com.alibaba.cloud.nacos.registry.NacosAutoServiceRegistration;
-import com.alibaba.cloud.nacos.registry.NacosRegistration;
-import com.alibaba.cloud.nacos.registry.NacosServiceRegistry;
+import com.alibaba.cloud.nacos.ConditionalOnNacosDiscoveryEnabled;
+import com.alibaba.cloud.nacos.NacosDiscoveryProperties;
+import com.alibaba.cloud.nacos.NacosNamingManager;
+import com.alibaba.cloud.nacos.discovery.NacosDiscoveryAutoConfiguration;
import org.springframework.boot.autoconfigure.AutoConfigureAfter;
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
@@ -41,8 +42,9 @@ import org.springframework.context.annotation.Configuration;
@ConditionalOnProperty(value = "spring.cloud.service-registry.auto-registration.enabled",
matchIfMissing = true)
@AutoConfigureAfter({ AutoServiceRegistrationConfiguration.class,
- AutoServiceRegistrationAutoConfiguration.class })
-public class NacosDiscoveryAutoConfiguration {
+ AutoServiceRegistrationAutoConfiguration.class,
+ NacosDiscoveryAutoConfiguration.class })
+public class NacosServiceRegistryAutoConfiguration {
@Bean
public NacosServiceRegistry nacosServiceRegistry(
@@ -51,11 +53,6 @@ public class NacosDiscoveryAutoConfiguration {
return new NacosServiceRegistry(nacosNamingManager, nacosDiscoveryProperties);
}
- @Bean
- public NacosNamingManager nacosNamingManager() {
- return new NacosNamingManager();
- }
-
@Bean
@ConditionalOnBean(AutoServiceRegistrationProperties.class)
public NacosRegistration nacosRegistration(NacosNamingManager nacosNamingManager,
diff --git a/spring-cloud-alibaba-nacos-discovery/src/main/resources/META-INF/spring.factories b/spring-cloud-alibaba-nacos-discovery/src/main/resources/META-INF/spring.factories
index 409c27203..6189df596 100644
--- a/spring-cloud-alibaba-nacos-discovery/src/main/resources/META-INF/spring.factories
+++ b/spring-cloud-alibaba-nacos-discovery/src/main/resources/META-INF/spring.factories
@@ -1,8 +1,10 @@
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
- com.alibaba.cloud.nacos.NacosDiscoveryAutoConfiguration,\
+ com.alibaba.cloud.nacos.discovery.NacosDiscoveryAutoConfiguration,\
com.alibaba.cloud.nacos.ribbon.RibbonNacosAutoConfiguration,\
com.alibaba.cloud.nacos.endpoint.NacosDiscoveryEndpointAutoConfiguration,\
- com.alibaba.cloud.nacos.discovery.NacosDiscoveryClientAutoConfiguration,\
+ com.alibaba.cloud.nacos.registry.NacosServiceRegistryAutoConfiguration,\
+ com.alibaba.cloud.nacos.discovery.NacosDiscoveryClientConfiguration,\
+ com.alibaba.cloud.nacos.discovery.reactive.NacosReactiveDiscoveryClientConfiguration,\
com.alibaba.cloud.nacos.discovery.configclient.NacosConfigServerAutoConfiguration
org.springframework.cloud.bootstrap.BootstrapConfiguration=\
com.alibaba.cloud.nacos.discovery.configclient.NacosDiscoveryClientConfigServiceBootstrapConfiguration
diff --git a/spring-cloud-alibaba-nacos-discovery/src/test/java/com/alibaba/cloud/nacos/NacosDiscoveryClientTests.java b/spring-cloud-alibaba-nacos-discovery/src/test/java/com/alibaba/cloud/nacos/NacosDiscoveryClientTests.java
index 3c24f5e7b..4f4a6aa79 100644
--- a/spring-cloud-alibaba-nacos-discovery/src/test/java/com/alibaba/cloud/nacos/NacosDiscoveryClientTests.java
+++ b/spring-cloud-alibaba-nacos-discovery/src/test/java/com/alibaba/cloud/nacos/NacosDiscoveryClientTests.java
@@ -16,119 +16,59 @@
package com.alibaba.cloud.nacos;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.LinkedList;
import java.util.List;
import com.alibaba.cloud.nacos.discovery.NacosDiscoveryClient;
-import com.alibaba.nacos.api.naming.NamingService;
-import com.alibaba.nacos.api.naming.pojo.Instance;
-import com.alibaba.nacos.api.naming.pojo.ListView;
-import org.junit.Test;
+import com.alibaba.cloud.nacos.discovery.NacosServiceDiscovery;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.ExtendWith;
+import org.mockito.InjectMocks;
+import org.mockito.Mock;
+import org.mockito.junit.jupiter.MockitoExtension;
import org.springframework.cloud.client.ServiceInstance;
-import static com.alibaba.cloud.nacos.test.NacosMockTest.serviceInstance;
+import static java.util.Collections.singletonList;
import static org.assertj.core.api.Assertions.assertThat;
-import static org.mockito.ArgumentMatchers.eq;
-import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
/**
* @author xiaojing
+ * @author echooymxq
*/
+@ExtendWith(MockitoExtension.class)
public class NacosDiscoveryClientTests {
- private String host = "123.123.123.123";
+ @Mock
+ private NacosServiceDiscovery serviceDiscovery;
- private int port = 8888;
+ @Mock
+ private NacosServiceInstance serviceInstance;
- private String serviceName = "test-service";
+ @InjectMocks
+ private NacosDiscoveryClient client;
@Test
- public void testGetServers() throws Exception {
+ public void testGetInstances() throws Exception {
- ArrayList instances = new ArrayList<>();
+ when(serviceDiscovery.getInstances("service-1"))
+ .thenReturn(singletonList(serviceInstance));
- HashMap map = new HashMap<>();
- map.put("test-key", "test-value");
- map.put("secure", "true");
+ List serviceInstances = client.getInstances("service-1");
- instances.add(serviceInstance(serviceName, true, host, port, map));
-
- NacosDiscoveryProperties nacosDiscoveryProperties = mock(
- NacosDiscoveryProperties.class);
- NacosNamingManager nacosNamingManager = mock(NacosNamingManager.class);
-
- NamingService namingService = mock(NamingService.class);
-
- when(nacosNamingManager.getNamingService()).thenReturn(namingService);
- when(nacosDiscoveryProperties.getGroup()).thenReturn("DEFAULT");
- when(namingService.selectInstances(eq(serviceName), eq("DEFAULT"), eq(true)))
- .thenReturn(instances);
-
- NacosDiscoveryClient discoveryClient = new NacosDiscoveryClient(
- nacosNamingManager, nacosDiscoveryProperties);
-
- List serviceInstances = discoveryClient
- .getInstances(serviceName);
-
- assertThat(serviceInstances.size()).isEqualTo(1);
-
- ServiceInstance serviceInstance = serviceInstances.get(0);
-
- assertThat(serviceInstance.getServiceId()).isEqualTo(serviceName);
- assertThat(serviceInstance.getHost()).isEqualTo(host);
- assertThat(serviceInstance.getPort()).isEqualTo(port);
- assertThat(serviceInstance.isSecure()).isEqualTo(true);
- assertThat(serviceInstance.getUri().toString())
- .isEqualTo(getUri(serviceInstance));
- assertThat(serviceInstance.getMetadata().get("test-key")).isEqualTo("test-value");
+ assertThat(serviceInstances).isNotEmpty();
}
@Test
- public void testGetAllService() throws Exception {
-
- ListView nacosServices = new ListView<>();
+ public void testGetServices() throws Exception {
- nacosServices.setData(new LinkedList<>());
-
- nacosServices.getData().add(serviceName + "1");
- nacosServices.getData().add(serviceName + "2");
- nacosServices.getData().add(serviceName + "3");
-
- NacosDiscoveryProperties nacosDiscoveryProperties = mock(
- NacosDiscoveryProperties.class);
- NacosNamingManager nacosNamingManager = mock(NacosNamingManager.class);
-
- NamingService namingService = mock(NamingService.class);
-
- NacosDiscoveryClient discoveryClient = new NacosDiscoveryClient(
- nacosNamingManager, nacosDiscoveryProperties);
-
- when(nacosNamingManager.getNamingService()).thenReturn(namingService);
- when(nacosDiscoveryProperties.getGroup()).thenReturn("DEFAULT");
- when(namingService.getServicesOfServer(eq(1), eq(Integer.MAX_VALUE),
- eq("DEFAULT"))).thenReturn(nacosServices);
-
- List services = discoveryClient.getServices();
-
- assertThat(services.size()).isEqualTo(3);
- assertThat(services.contains(serviceName + "1"));
- assertThat(services.contains(serviceName + "2"));
- assertThat(services.contains(serviceName + "3"));
-
- }
+ when(serviceDiscovery.getServices()).thenReturn(singletonList("service-1"));
- private String getUri(ServiceInstance instance) {
+ List services = client.getServices();
- if (instance.isSecure()) {
- return "https://" + host + ":" + port;
- }
+ assertThat(services).contains("service-1").size().isEqualTo(1);
- return "http://" + host + ":" + port;
}
}
diff --git a/spring-cloud-alibaba-nacos-discovery/src/test/java/com/alibaba/cloud/nacos/NacosDiscoveryPropertiesServerAddressBothLevelTests.java b/spring-cloud-alibaba-nacos-discovery/src/test/java/com/alibaba/cloud/nacos/NacosDiscoveryPropertiesServerAddressBothLevelTests.java
index 8cbc831a1..9e1ce8ae3 100644
--- a/spring-cloud-alibaba-nacos-discovery/src/test/java/com/alibaba/cloud/nacos/NacosDiscoveryPropertiesServerAddressBothLevelTests.java
+++ b/spring-cloud-alibaba-nacos-discovery/src/test/java/com/alibaba/cloud/nacos/NacosDiscoveryPropertiesServerAddressBothLevelTests.java
@@ -16,7 +16,8 @@
package com.alibaba.cloud.nacos;
-import com.alibaba.cloud.nacos.discovery.NacosDiscoveryClientAutoConfiguration;
+import com.alibaba.cloud.nacos.discovery.NacosDiscoveryClientConfiguration;
+import com.alibaba.cloud.nacos.registry.NacosServiceRegistryAutoConfiguration;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -53,8 +54,8 @@ public class NacosDiscoveryPropertiesServerAddressBothLevelTests {
@Configuration
@EnableAutoConfiguration
@ImportAutoConfiguration({ AutoServiceRegistrationConfiguration.class,
- NacosDiscoveryClientAutoConfiguration.class,
- NacosDiscoveryAutoConfiguration.class })
+ NacosDiscoveryClientConfiguration.class,
+ NacosServiceRegistryAutoConfiguration.class })
public static class TestConfig {
}
diff --git a/spring-cloud-alibaba-nacos-discovery/src/test/java/com/alibaba/cloud/nacos/NacosDiscoveryPropertiesServerAddressTopLevelTests.java b/spring-cloud-alibaba-nacos-discovery/src/test/java/com/alibaba/cloud/nacos/NacosDiscoveryPropertiesServerAddressTopLevelTests.java
index 6bc146820..db90b57a7 100644
--- a/spring-cloud-alibaba-nacos-discovery/src/test/java/com/alibaba/cloud/nacos/NacosDiscoveryPropertiesServerAddressTopLevelTests.java
+++ b/spring-cloud-alibaba-nacos-discovery/src/test/java/com/alibaba/cloud/nacos/NacosDiscoveryPropertiesServerAddressTopLevelTests.java
@@ -16,7 +16,8 @@
package com.alibaba.cloud.nacos;
-import com.alibaba.cloud.nacos.discovery.NacosDiscoveryClientAutoConfiguration;
+import com.alibaba.cloud.nacos.discovery.NacosDiscoveryClientConfiguration;
+import com.alibaba.cloud.nacos.registry.NacosServiceRegistryAutoConfiguration;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -54,8 +55,8 @@ public class NacosDiscoveryPropertiesServerAddressTopLevelTests {
@Configuration
@EnableAutoConfiguration
@ImportAutoConfiguration({ AutoServiceRegistrationConfiguration.class,
- NacosDiscoveryClientAutoConfiguration.class,
- NacosDiscoveryAutoConfiguration.class })
+ NacosDiscoveryClientConfiguration.class,
+ NacosServiceRegistryAutoConfiguration.class })
public static class TestConfig {
}
diff --git a/spring-cloud-alibaba-nacos-discovery/src/test/java/com/alibaba/cloud/nacos/discovery/NacosDiscoveryAutoConfigurationTests.java b/spring-cloud-alibaba-nacos-discovery/src/test/java/com/alibaba/cloud/nacos/discovery/NacosDiscoveryAutoConfigurationTests.java
new file mode 100644
index 000000000..07d20a4f9
--- /dev/null
+++ b/spring-cloud-alibaba-nacos-discovery/src/test/java/com/alibaba/cloud/nacos/discovery/NacosDiscoveryAutoConfigurationTests.java
@@ -0,0 +1,47 @@
+/*
+ * Copyright 2013-2018 the original author or authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://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 com.alibaba.cloud.nacos.discovery;
+
+import com.alibaba.cloud.nacos.NacosDiscoveryProperties;
+import com.alibaba.cloud.nacos.NacosNamingManager;
+import org.junit.jupiter.api.Test;
+
+import org.springframework.boot.autoconfigure.AutoConfigurations;
+import org.springframework.boot.test.context.runner.ApplicationContextRunner;
+import org.springframework.cloud.commons.util.UtilAutoConfiguration;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+/**
+ * @author echooymxq
+ **/
+public class NacosDiscoveryAutoConfigurationTests {
+
+ private ApplicationContextRunner contextRunner = new ApplicationContextRunner()
+ .withConfiguration(AutoConfigurations.of(UtilAutoConfiguration.class,
+ NacosDiscoveryAutoConfiguration.class));
+
+ @Test
+ public void testDefaultInitialization() {
+ contextRunner.run(context -> {
+ assertThat(context).hasSingleBean(NacosDiscoveryProperties.class);
+ assertThat(context).hasSingleBean(NacosNamingManager.class);
+ assertThat(context).hasSingleBean(NacosServiceDiscovery.class);
+ });
+ }
+
+}
diff --git a/spring-cloud-alibaba-nacos-discovery/src/test/java/com/alibaba/cloud/nacos/discovery/NacosDiscoveryClientConfigurationTest.java b/spring-cloud-alibaba-nacos-discovery/src/test/java/com/alibaba/cloud/nacos/discovery/NacosDiscoveryClientConfigurationTest.java
new file mode 100644
index 000000000..92e93a1a4
--- /dev/null
+++ b/spring-cloud-alibaba-nacos-discovery/src/test/java/com/alibaba/cloud/nacos/discovery/NacosDiscoveryClientConfigurationTest.java
@@ -0,0 +1,55 @@
+/*
+ * Copyright 2013-2018 the original author or authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://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 com.alibaba.cloud.nacos.discovery;
+
+import org.junit.jupiter.api.Test;
+
+import org.springframework.boot.autoconfigure.AutoConfigurations;
+import org.springframework.boot.test.context.runner.ApplicationContextRunner;
+import org.springframework.cloud.client.discovery.DiscoveryClient;
+import org.springframework.cloud.commons.util.UtilAutoConfiguration;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+/**
+ * @author echooymxq
+ **/
+public class NacosDiscoveryClientConfigurationTest {
+
+ private ApplicationContextRunner contextRunner = new ApplicationContextRunner()
+ .withConfiguration(AutoConfigurations.of(UtilAutoConfiguration.class,
+ NacosDiscoveryAutoConfiguration.class,
+ NacosDiscoveryClientConfiguration.class));
+
+ @Test
+ public void testDefaultInitialization() {
+ contextRunner.run(context -> {
+ assertThat(context).hasSingleBean(DiscoveryClient.class);
+ assertThat(context).hasSingleBean(NacosWatch.class);
+ });
+ }
+
+ @Test
+ public void testDiscoveryBlockingDisabled() {
+ contextRunner.withPropertyValues("spring.cloud.discovery.blocking.enabled=false")
+ .run(context -> {
+ assertThat(context).doesNotHaveBean(DiscoveryClient.class);
+ assertThat(context).doesNotHaveBean(NacosWatch.class);
+ });
+ }
+
+}
diff --git a/spring-cloud-alibaba-nacos-discovery/src/test/java/com/alibaba/cloud/nacos/discovery/NacosServiceDiscoveryTest.java b/spring-cloud-alibaba-nacos-discovery/src/test/java/com/alibaba/cloud/nacos/discovery/NacosServiceDiscoveryTest.java
new file mode 100644
index 000000000..74f4b5b23
--- /dev/null
+++ b/spring-cloud-alibaba-nacos-discovery/src/test/java/com/alibaba/cloud/nacos/discovery/NacosServiceDiscoveryTest.java
@@ -0,0 +1,135 @@
+/*
+ * Copyright 2013-2018 the original author or authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://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 com.alibaba.cloud.nacos.discovery;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.LinkedList;
+import java.util.List;
+
+import com.alibaba.cloud.nacos.NacosDiscoveryProperties;
+import com.alibaba.cloud.nacos.NacosNamingManager;
+import com.alibaba.nacos.api.exception.NacosException;
+import com.alibaba.nacos.api.naming.NamingService;
+import com.alibaba.nacos.api.naming.pojo.Instance;
+import com.alibaba.nacos.api.naming.pojo.ListView;
+import org.junit.jupiter.api.Test;
+
+import org.springframework.cloud.client.ServiceInstance;
+
+import static com.alibaba.cloud.nacos.test.NacosMockTest.serviceInstance;
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
+/**
+ * @author xiaojing
+ * @author echooymxq
+ **/
+public class NacosServiceDiscoveryTest {
+
+ private String host = "123.123.123.123";
+
+ private int port = 8888;
+
+ private String serviceName = "test-service";
+
+ @Test
+ public void testGetInstances() throws NacosException {
+ ArrayList instances = new ArrayList<>();
+
+ HashMap map = new HashMap<>();
+ map.put("test-key", "test-value");
+ map.put("secure", "true");
+
+ instances.add(serviceInstance(serviceName, true, host, port, map));
+
+ NacosDiscoveryProperties nacosDiscoveryProperties = mock(
+ NacosDiscoveryProperties.class);
+
+ NacosNamingManager nacosNamingManager = mock(NacosNamingManager.class);
+
+ NamingService namingService = mock(NamingService.class);
+
+ when(nacosNamingManager.getNamingService()).thenReturn(namingService);
+ when(nacosDiscoveryProperties.getGroup()).thenReturn("DEFAULT");
+ when(namingService.selectInstances(eq(serviceName), eq("DEFAULT"), eq(true)))
+ .thenReturn(instances);
+
+ NacosServiceDiscovery serviceDiscovery = new NacosServiceDiscovery(
+ nacosNamingManager, nacosDiscoveryProperties);
+
+ List serviceInstances = serviceDiscovery
+ .getInstances(serviceName);
+
+ assertThat(serviceInstances.size()).isEqualTo(1);
+
+ ServiceInstance serviceInstance = serviceInstances.get(0);
+
+ assertThat(serviceInstance.getServiceId()).isEqualTo(serviceName);
+ assertThat(serviceInstance.getHost()).isEqualTo(host);
+ assertThat(serviceInstance.getPort()).isEqualTo(port);
+ assertThat(serviceInstance.isSecure()).isEqualTo(true);
+ assertThat(serviceInstance.getUri().toString())
+ .isEqualTo(getUri(serviceInstance));
+ assertThat(serviceInstance.getMetadata().get("test-key")).isEqualTo("test-value");
+ }
+
+ @Test
+ public void testGetServices() throws NacosException {
+ ListView nacosServices = new ListView<>();
+
+ nacosServices.setData(new LinkedList<>());
+
+ nacosServices.getData().add(serviceName + "1");
+ nacosServices.getData().add(serviceName + "2");
+ nacosServices.getData().add(serviceName + "3");
+
+ NacosDiscoveryProperties nacosDiscoveryProperties = mock(
+ NacosDiscoveryProperties.class);
+
+ NacosNamingManager nacosNamingManager = mock(NacosNamingManager.class);
+
+ NamingService namingService = mock(NamingService.class);
+
+ when(nacosNamingManager.getNamingService()).thenReturn(namingService);
+ when(nacosDiscoveryProperties.getGroup()).thenReturn("DEFAULT");
+ when(namingService.getServicesOfServer(eq(1), eq(Integer.MAX_VALUE),
+ eq("DEFAULT"))).thenReturn(nacosServices);
+
+ NacosServiceDiscovery serviceDiscovery = new NacosServiceDiscovery(
+ nacosNamingManager, nacosDiscoveryProperties);
+
+ List services = serviceDiscovery.getServices();
+
+ assertThat(services.size()).isEqualTo(3);
+ assertThat(services.contains(serviceName + "1"));
+ assertThat(services.contains(serviceName + "2"));
+ assertThat(services.contains(serviceName + "3"));
+ }
+
+ private String getUri(ServiceInstance instance) {
+
+ if (instance.isSecure()) {
+ return "https://" + host + ":" + port;
+ }
+
+ return "http://" + host + ":" + port;
+ }
+
+}
diff --git a/spring-cloud-alibaba-nacos-discovery/src/test/java/com/alibaba/cloud/nacos/discovery/reactive/NacosReactiveDiscoveryClientConfigurationTests.java b/spring-cloud-alibaba-nacos-discovery/src/test/java/com/alibaba/cloud/nacos/discovery/reactive/NacosReactiveDiscoveryClientConfigurationTests.java
new file mode 100644
index 000000000..9700581eb
--- /dev/null
+++ b/spring-cloud-alibaba-nacos-discovery/src/test/java/com/alibaba/cloud/nacos/discovery/reactive/NacosReactiveDiscoveryClientConfigurationTests.java
@@ -0,0 +1,45 @@
+/*
+ * Copyright 2013-2018 the original author or authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://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 com.alibaba.cloud.nacos.discovery.reactive;
+
+import com.alibaba.cloud.nacos.discovery.NacosDiscoveryAutoConfiguration;
+import org.junit.jupiter.api.Test;
+
+import org.springframework.boot.autoconfigure.AutoConfigurations;
+import org.springframework.boot.test.context.runner.ApplicationContextRunner;
+import org.springframework.cloud.client.discovery.ReactiveDiscoveryClient;
+import org.springframework.cloud.commons.util.UtilAutoConfiguration;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+/**
+ * @author echooymxq
+ **/
+public class NacosReactiveDiscoveryClientConfigurationTests {
+
+ private ApplicationContextRunner contextRunner = new ApplicationContextRunner()
+ .withConfiguration(AutoConfigurations.of(UtilAutoConfiguration.class,
+ NacosDiscoveryAutoConfiguration.class,
+ NacosReactiveDiscoveryClientConfiguration.class));
+
+ @Test
+ public void testDefaultInitialization() {
+ contextRunner.run(context -> assertThat(context)
+ .hasSingleBean(ReactiveDiscoveryClient.class));
+ }
+
+}
diff --git a/spring-cloud-alibaba-nacos-discovery/src/test/java/com/alibaba/cloud/nacos/discovery/reactive/NacosReactiveDiscoveryClientTests.java b/spring-cloud-alibaba-nacos-discovery/src/test/java/com/alibaba/cloud/nacos/discovery/reactive/NacosReactiveDiscoveryClientTests.java
new file mode 100644
index 000000000..ff474fdcc
--- /dev/null
+++ b/spring-cloud-alibaba-nacos-discovery/src/test/java/com/alibaba/cloud/nacos/discovery/reactive/NacosReactiveDiscoveryClientTests.java
@@ -0,0 +1,74 @@
+/*
+ * Copyright 2013-2018 the original author or authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://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 com.alibaba.cloud.nacos.discovery.reactive;
+
+import java.util.Arrays;
+
+import com.alibaba.cloud.nacos.discovery.NacosServiceDiscovery;
+import com.alibaba.nacos.api.exception.NacosException;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.ExtendWith;
+import org.mockito.InjectMocks;
+import org.mockito.Mock;
+import org.mockito.junit.jupiter.MockitoExtension;
+import reactor.core.publisher.Flux;
+import reactor.test.StepVerifier;
+
+import org.springframework.cloud.client.ServiceInstance;
+
+import static java.util.Collections.singletonList;
+import static org.mockito.Mockito.when;
+
+/**
+ * @author echooymxq
+ **/
+@ExtendWith(MockitoExtension.class)
+class NacosReactiveDiscoveryClientTests {
+
+ @Mock
+ private NacosServiceDiscovery serviceDiscovery;
+
+ @Mock
+ private ServiceInstance serviceInstance;
+
+ @InjectMocks
+ private NacosReactiveDiscoveryClient client;
+
+ @Test
+ void testGetInstances() throws NacosException {
+
+ when(serviceDiscovery.getInstances("reactive-service"))
+ .thenReturn(singletonList(serviceInstance));
+
+ Flux instances = this.client.getInstances("reactive-service");
+
+ StepVerifier.create(instances).expectNextCount(1).expectComplete().verify();
+ }
+
+ @Test
+ void testGetServices() throws NacosException {
+
+ when(serviceDiscovery.getServices())
+ .thenReturn(Arrays.asList("reactive-service1", "reactive-service2"));
+
+ Flux services = this.client.getServices();
+
+ StepVerifier.create(services).expectNext("reactive-service1", "reactive-service2")
+ .expectComplete().verify();
+ }
+
+}
diff --git a/spring-cloud-alibaba-nacos-discovery/src/test/java/com/alibaba/cloud/nacos/registry/NacosAutoServiceRegistrationIpNetworkInterfaceTests.java b/spring-cloud-alibaba-nacos-discovery/src/test/java/com/alibaba/cloud/nacos/registry/NacosAutoServiceRegistrationIpNetworkInterfaceTests.java
index a71b2c84b..0a1325a52 100644
--- a/spring-cloud-alibaba-nacos-discovery/src/test/java/com/alibaba/cloud/nacos/registry/NacosAutoServiceRegistrationIpNetworkInterfaceTests.java
+++ b/spring-cloud-alibaba-nacos-discovery/src/test/java/com/alibaba/cloud/nacos/registry/NacosAutoServiceRegistrationIpNetworkInterfaceTests.java
@@ -21,9 +21,8 @@ import java.net.InetAddress;
import java.net.NetworkInterface;
import java.util.Enumeration;
-import com.alibaba.cloud.nacos.NacosDiscoveryAutoConfiguration;
import com.alibaba.cloud.nacos.NacosDiscoveryProperties;
-import com.alibaba.cloud.nacos.discovery.NacosDiscoveryClientAutoConfiguration;
+import com.alibaba.cloud.nacos.discovery.NacosDiscoveryClientConfiguration;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -104,8 +103,8 @@ public class NacosAutoServiceRegistrationIpNetworkInterfaceTests {
@Configuration
@EnableAutoConfiguration
@ImportAutoConfiguration({ AutoServiceRegistrationConfiguration.class,
- NacosDiscoveryClientAutoConfiguration.class,
- NacosDiscoveryAutoConfiguration.class })
+ NacosDiscoveryClientConfiguration.class,
+ NacosServiceRegistryAutoConfiguration.class })
public static class TestConfig {
static boolean hasValidNetworkInterface = false;
diff --git a/spring-cloud-alibaba-nacos-discovery/src/test/java/com/alibaba/cloud/nacos/registry/NacosAutoServiceRegistrationIpTests.java b/spring-cloud-alibaba-nacos-discovery/src/test/java/com/alibaba/cloud/nacos/registry/NacosAutoServiceRegistrationIpTests.java
index e364c7a12..4df24c7a8 100644
--- a/spring-cloud-alibaba-nacos-discovery/src/test/java/com/alibaba/cloud/nacos/registry/NacosAutoServiceRegistrationIpTests.java
+++ b/spring-cloud-alibaba-nacos-discovery/src/test/java/com/alibaba/cloud/nacos/registry/NacosAutoServiceRegistrationIpTests.java
@@ -16,9 +16,8 @@
package com.alibaba.cloud.nacos.registry;
-import com.alibaba.cloud.nacos.NacosDiscoveryAutoConfiguration;
import com.alibaba.cloud.nacos.NacosDiscoveryProperties;
-import com.alibaba.cloud.nacos.discovery.NacosDiscoveryClientAutoConfiguration;
+import com.alibaba.cloud.nacos.discovery.NacosDiscoveryClientConfiguration;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -70,8 +69,8 @@ public class NacosAutoServiceRegistrationIpTests {
@Configuration
@EnableAutoConfiguration
@ImportAutoConfiguration({ AutoServiceRegistrationConfiguration.class,
- NacosDiscoveryClientAutoConfiguration.class,
- NacosDiscoveryAutoConfiguration.class })
+ NacosDiscoveryClientConfiguration.class,
+ NacosServiceRegistryAutoConfiguration.class })
public static class TestConfig {
}
diff --git a/spring-cloud-alibaba-nacos-discovery/src/test/java/com/alibaba/cloud/nacos/registry/NacosAutoServiceRegistrationManagementPortTests.java b/spring-cloud-alibaba-nacos-discovery/src/test/java/com/alibaba/cloud/nacos/registry/NacosAutoServiceRegistrationManagementPortTests.java
index 4e2e8830a..ca3c40ae1 100644
--- a/spring-cloud-alibaba-nacos-discovery/src/test/java/com/alibaba/cloud/nacos/registry/NacosAutoServiceRegistrationManagementPortTests.java
+++ b/spring-cloud-alibaba-nacos-discovery/src/test/java/com/alibaba/cloud/nacos/registry/NacosAutoServiceRegistrationManagementPortTests.java
@@ -16,9 +16,8 @@
package com.alibaba.cloud.nacos.registry;
-import com.alibaba.cloud.nacos.NacosDiscoveryAutoConfiguration;
import com.alibaba.cloud.nacos.NacosDiscoveryProperties;
-import com.alibaba.cloud.nacos.discovery.NacosDiscoveryClientAutoConfiguration;
+import com.alibaba.cloud.nacos.discovery.NacosDiscoveryClientConfiguration;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -77,8 +76,8 @@ public class NacosAutoServiceRegistrationManagementPortTests {
@Configuration
@EnableAutoConfiguration
@ImportAutoConfiguration({ AutoServiceRegistrationConfiguration.class,
- NacosDiscoveryClientAutoConfiguration.class,
- NacosDiscoveryAutoConfiguration.class })
+ NacosDiscoveryClientConfiguration.class,
+ NacosServiceRegistryAutoConfiguration.class })
public static class TestConfig {
}
diff --git a/spring-cloud-alibaba-nacos-discovery/src/test/java/com/alibaba/cloud/nacos/registry/NacosAutoServiceRegistrationPortTests.java b/spring-cloud-alibaba-nacos-discovery/src/test/java/com/alibaba/cloud/nacos/registry/NacosAutoServiceRegistrationPortTests.java
index c3da41066..c2dd50e98 100644
--- a/spring-cloud-alibaba-nacos-discovery/src/test/java/com/alibaba/cloud/nacos/registry/NacosAutoServiceRegistrationPortTests.java
+++ b/spring-cloud-alibaba-nacos-discovery/src/test/java/com/alibaba/cloud/nacos/registry/NacosAutoServiceRegistrationPortTests.java
@@ -16,9 +16,8 @@
package com.alibaba.cloud.nacos.registry;
-import com.alibaba.cloud.nacos.NacosDiscoveryAutoConfiguration;
import com.alibaba.cloud.nacos.NacosDiscoveryProperties;
-import com.alibaba.cloud.nacos.discovery.NacosDiscoveryClientAutoConfiguration;
+import com.alibaba.cloud.nacos.discovery.NacosDiscoveryClientConfiguration;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -70,8 +69,8 @@ public class NacosAutoServiceRegistrationPortTests {
@Configuration
@EnableAutoConfiguration
@ImportAutoConfiguration({ AutoServiceRegistrationConfiguration.class,
- NacosDiscoveryClientAutoConfiguration.class,
- NacosDiscoveryAutoConfiguration.class })
+ NacosDiscoveryClientConfiguration.class,
+ NacosServiceRegistryAutoConfiguration.class })
public static class TestConfig {
}
diff --git a/spring-cloud-alibaba-nacos-discovery/src/test/java/com/alibaba/cloud/nacos/registry/NacosAutoServiceRegistrationTests.java b/spring-cloud-alibaba-nacos-discovery/src/test/java/com/alibaba/cloud/nacos/registry/NacosAutoServiceRegistrationTests.java
index 8519c4cd4..0d5215ec8 100644
--- a/spring-cloud-alibaba-nacos-discovery/src/test/java/com/alibaba/cloud/nacos/registry/NacosAutoServiceRegistrationTests.java
+++ b/spring-cloud-alibaba-nacos-discovery/src/test/java/com/alibaba/cloud/nacos/registry/NacosAutoServiceRegistrationTests.java
@@ -18,10 +18,9 @@ package com.alibaba.cloud.nacos.registry;
import java.util.Map;
-import com.alibaba.cloud.nacos.NacosDiscoveryAutoConfiguration;
import com.alibaba.cloud.nacos.NacosDiscoveryProperties;
import com.alibaba.cloud.nacos.NacosNamingManager;
-import com.alibaba.cloud.nacos.discovery.NacosDiscoveryClientAutoConfiguration;
+import com.alibaba.cloud.nacos.discovery.NacosDiscoveryClientConfiguration;
import com.alibaba.cloud.nacos.endpoint.NacosDiscoveryEndpoint;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -194,8 +193,8 @@ public class NacosAutoServiceRegistrationTests {
@Configuration
@EnableAutoConfiguration
@ImportAutoConfiguration({ AutoServiceRegistrationConfiguration.class,
- NacosDiscoveryClientAutoConfiguration.class,
- NacosDiscoveryAutoConfiguration.class })
+ NacosDiscoveryClientConfiguration.class,
+ NacosServiceRegistryAutoConfiguration.class })
public static class TestConfig {
}
diff --git a/spring-cloud-alibaba-nacos-discovery/src/test/java/com/alibaba/cloud/nacos/ribbon/NacosRibbonClientConfigurationTests.java b/spring-cloud-alibaba-nacos-discovery/src/test/java/com/alibaba/cloud/nacos/ribbon/NacosRibbonClientConfigurationTests.java
index 958a29f1b..0256f4fbb 100644
--- a/spring-cloud-alibaba-nacos-discovery/src/test/java/com/alibaba/cloud/nacos/ribbon/NacosRibbonClientConfigurationTests.java
+++ b/spring-cloud-alibaba-nacos-discovery/src/test/java/com/alibaba/cloud/nacos/ribbon/NacosRibbonClientConfigurationTests.java
@@ -16,7 +16,7 @@
package com.alibaba.cloud.nacos.ribbon;
-import com.alibaba.cloud.nacos.discovery.NacosDiscoveryClientAutoConfiguration;
+import com.alibaba.cloud.nacos.discovery.NacosDiscoveryClientConfiguration;
import com.netflix.client.config.DefaultClientConfigImpl;
import com.netflix.client.config.IClientConfig;
import org.junit.Test;
@@ -40,7 +40,7 @@ public class NacosRibbonClientConfigurationTests {
private WebApplicationContextRunner contextRunner = new WebApplicationContextRunner()
.withConfiguration(AutoConfigurations.of(NacosRibbonTestConfiguration.class,
NacosRibbonClientConfiguration.class,
- NacosDiscoveryClientAutoConfiguration.class,
+ NacosDiscoveryClientConfiguration.class,
RibbonNacosAutoConfiguration.class))
.withPropertyValues("spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848")
.withPropertyValues("spring.cloud.nacos.discovery.port=18080")
diff --git a/spring-cloud-alibaba-sidecar/src/main/java/com/alibaba/cloud/sidecar/nacos/SidecarNacosAutoConfiguration.java b/spring-cloud-alibaba-sidecar/src/main/java/com/alibaba/cloud/sidecar/nacos/SidecarNacosAutoConfiguration.java
index 8c39c4c6b..0e80d6e9c 100644
--- a/spring-cloud-alibaba-sidecar/src/main/java/com/alibaba/cloud/sidecar/nacos/SidecarNacosAutoConfiguration.java
+++ b/spring-cloud-alibaba-sidecar/src/main/java/com/alibaba/cloud/sidecar/nacos/SidecarNacosAutoConfiguration.java
@@ -17,7 +17,7 @@
package com.alibaba.cloud.sidecar.nacos;
import com.alibaba.cloud.nacos.NacosDiscoveryProperties;
-import com.alibaba.cloud.nacos.discovery.NacosDiscoveryClientAutoConfiguration;
+import com.alibaba.cloud.nacos.discovery.NacosDiscoveryAutoConfiguration;
import com.alibaba.cloud.sidecar.SidecarAutoConfiguration;
import com.alibaba.cloud.sidecar.SidecarDiscoveryClient;
import com.alibaba.cloud.sidecar.SidecarProperties;
@@ -32,7 +32,7 @@ import org.springframework.context.annotation.Configuration;
* @author www.itmuch.com
*/
@Configuration
-@AutoConfigureBefore({ NacosDiscoveryClientAutoConfiguration.class,
+@AutoConfigureBefore({ NacosDiscoveryAutoConfiguration.class,
SidecarAutoConfiguration.class })
@ConditionalOnClass(NacosDiscoveryProperties.class)
public class SidecarNacosAutoConfiguration {