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 {