From 702831cb8fea9520db6890ad5a1e5f4b7c52cc0c Mon Sep 17 00:00:00 2001 From: yuhuangbin Date: Sun, 13 Sep 2020 18:02:36 +0800 Subject: [PATCH 1/5] fix --- .../cloud/nacos/NacosDiscoveryProperties.java | 18 +++------ .../cloud/nacos/NacosServiceManager.java | 24 +++++++++++- .../NacosDiscoveryInfoInitializedEvent.java | 38 +++++++++++++++++++ 3 files changed, 66 insertions(+), 14 deletions(-) create mode 100644 spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/event/NacosDiscoveryInfoInitializedEvent.java diff --git a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/NacosDiscoveryProperties.java b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/NacosDiscoveryProperties.java index f3297e8a..3c8c01c8 100644 --- a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/NacosDiscoveryProperties.java +++ b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/NacosDiscoveryProperties.java @@ -23,14 +23,13 @@ import java.util.Enumeration; import java.util.HashMap; import java.util.Map; import java.util.Objects; -import java.util.Optional; import java.util.Properties; import java.util.regex.Matcher; import java.util.regex.Pattern; import javax.annotation.PostConstruct; -import com.alibaba.cloud.nacos.registry.NacosAutoServiceRegistration; +import com.alibaba.cloud.nacos.event.NacosDiscoveryInfoInitializedEvent; import com.alibaba.nacos.api.naming.PreservedMetadataKeys; import com.alibaba.nacos.client.naming.utils.UtilAndComs; import com.alibaba.spring.util.PropertySourcesUtils; @@ -41,6 +40,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.cloud.commons.util.InetUtils; +import org.springframework.context.ApplicationEventPublisher; import org.springframework.core.env.ConfigurableEnvironment; import org.springframework.core.env.Environment; import org.springframework.util.StringUtils; @@ -213,10 +213,7 @@ public class NacosDiscoveryProperties { private Environment environment; @Autowired - private NacosServiceManager nacosServiceManager; - - @Autowired - private Optional nacosAutoServiceRegistrationOptional; + private ApplicationEventPublisher applicationEventPublisher; @PostConstruct public void init() throws Exception { @@ -267,13 +264,8 @@ public class NacosDiscoveryProperties { this.overrideFromEnv(environment); - nacosAutoServiceRegistrationOptional.ifPresent(nacosAutoServiceRegistration -> { - if (nacosServiceManager.isNacosDiscoveryInfoChanged(this)) { - nacosAutoServiceRegistration.stop(); - nacosServiceManager.reBuildNacosService(getNacosProperties()); - nacosAutoServiceRegistration.start(); - } - }); + applicationEventPublisher + .publishEvent(new NacosDiscoveryInfoInitializedEvent(this)); } public String getEndpoint() { diff --git a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/NacosServiceManager.java b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/NacosServiceManager.java index bedb4e2c..9dfc8323 100644 --- a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/NacosServiceManager.java +++ b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/NacosServiceManager.java @@ -17,13 +17,17 @@ package com.alibaba.cloud.nacos; import java.util.Objects; +import java.util.Optional; import java.util.Properties; +import com.alibaba.cloud.nacos.event.NacosDiscoveryInfoInitializedEvent; +import com.alibaba.cloud.nacos.registry.NacosAutoServiceRegistration; import com.alibaba.cloud.nacos.registry.NacosRegistration; import com.alibaba.nacos.api.exception.NacosException; import com.alibaba.nacos.api.naming.NamingMaintainService; import com.alibaba.nacos.api.naming.NamingService; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.cloud.client.discovery.event.InstancePreRegisteredEvent; import org.springframework.cloud.client.serviceregistry.Registration; import org.springframework.context.event.EventListener; @@ -43,6 +47,9 @@ public class NacosServiceManager { private NamingMaintainService namingMaintainService; + @Autowired + private Optional nacosAutoServiceRegistrationOptional; + public NamingService getNamingService(Properties properties) { if (Objects.isNull(this.namingService)) { buildNamingService(properties); @@ -107,7 +114,7 @@ public class NacosServiceManager { } } - public void reBuildNacosService(Properties nacosProperties) { + private void reBuildNacosService(Properties nacosProperties) { namingService = createNewNamingService(nacosProperties); namingMaintainService = createNamingMaintainService(nacosProperties); } @@ -130,4 +137,19 @@ public class NacosServiceManager { } } + @EventListener + public void onNacosDiscoveryInfoInitializedEvent( + NacosDiscoveryInfoInitializedEvent nacosDiscoveryInfoInitializedEvent) { + NacosDiscoveryProperties nacosDiscoveryProperties = nacosDiscoveryInfoInitializedEvent + .getSource(); + if (isNacosDiscoveryInfoChanged(nacosDiscoveryProperties) + && nacosAutoServiceRegistrationOptional.isPresent()) { + NacosAutoServiceRegistration nacosAutoServiceRegistration = nacosAutoServiceRegistrationOptional + .get(); + nacosAutoServiceRegistration.stop(); + reBuildNacosService(nacosDiscoveryProperties.getNacosProperties()); + nacosAutoServiceRegistration.start(); + } + } + } diff --git a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/event/NacosDiscoveryInfoInitializedEvent.java b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/event/NacosDiscoveryInfoInitializedEvent.java new file mode 100644 index 00000000..0cca5718 --- /dev/null +++ b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/event/NacosDiscoveryInfoInitializedEvent.java @@ -0,0 +1,38 @@ +/* + * 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.event; + +import com.alibaba.cloud.nacos.NacosDiscoveryProperties; + +import org.springframework.context.ApplicationEvent; + +/** + * @author yuhuangbin + */ +public class NacosDiscoveryInfoInitializedEvent extends ApplicationEvent { + + public NacosDiscoveryInfoInitializedEvent( + NacosDiscoveryProperties nacosDiscoveryProperties) { + super(nacosDiscoveryProperties); + } + + @Override + public NacosDiscoveryProperties getSource() { + return (NacosDiscoveryProperties) super.getSource(); + } + +} From e9a6eaa0259aaeebea6d5432d90a53ea6cc07259 Mon Sep 17 00:00:00 2001 From: yuhuangbin Date: Sun, 13 Sep 2020 19:24:25 +0800 Subject: [PATCH 2/5] fix --- .../cloud/nacos/NacosDiscoveryProperties.java | 20 +++++++++-- .../cloud/nacos/NacosServiceManager.java | 33 ++++--------------- ...va => NacosDiscoveryInfoChangedEvent.java} | 4 +-- .../NacosAutoServiceRegistration.java | 12 +++++++ .../NacosRibbonClientConfiguration.java | 7 ++-- .../cloud/nacos/ribbon/NacosServerList.java | 10 ++---- .../nacos/ribbon/NacosServerListTests.java | 12 +++---- 7 files changed, 45 insertions(+), 53 deletions(-) rename spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/event/{NacosDiscoveryInfoInitializedEvent.java => NacosDiscoveryInfoChangedEvent.java} (89%) diff --git a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/NacosDiscoveryProperties.java b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/NacosDiscoveryProperties.java index 3c8c01c8..3ee047b4 100644 --- a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/NacosDiscoveryProperties.java +++ b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/NacosDiscoveryProperties.java @@ -29,7 +29,8 @@ import java.util.regex.Pattern; import javax.annotation.PostConstruct; -import com.alibaba.cloud.nacos.event.NacosDiscoveryInfoInitializedEvent; +import com.alibaba.cloud.nacos.event.NacosDiscoveryInfoChangedEvent; +import com.alibaba.nacos.api.naming.NamingService; import com.alibaba.nacos.api.naming.PreservedMetadataKeys; import com.alibaba.nacos.client.naming.utils.UtilAndComs; import com.alibaba.spring.util.PropertySourcesUtils; @@ -212,6 +213,9 @@ public class NacosDiscoveryProperties { @Autowired private Environment environment; + @Autowired + private NacosServiceManager nacosServiceManager; + @Autowired private ApplicationEventPublisher applicationEventPublisher; @@ -263,9 +267,19 @@ public class NacosDiscoveryProperties { } this.overrideFromEnv(environment); + if (nacosServiceManager.isNacosDiscoveryInfoChanged(this)) { + applicationEventPublisher + .publishEvent(new NacosDiscoveryInfoChangedEvent(this)); + } + } - applicationEventPublisher - .publishEvent(new NacosDiscoveryInfoInitializedEvent(this)); + /** + * recommend to use {@link NacosServiceManager#getNamingService(Properties)}. + * @return NamingService + */ + @Deprecated + public NamingService namingServiceInstance() { + return nacosServiceManager.getNamingService(this.getNacosProperties()); } public String getEndpoint() { diff --git a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/NacosServiceManager.java b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/NacosServiceManager.java index 9dfc8323..c672bbac 100644 --- a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/NacosServiceManager.java +++ b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/NacosServiceManager.java @@ -17,17 +17,15 @@ package com.alibaba.cloud.nacos; import java.util.Objects; -import java.util.Optional; import java.util.Properties; -import com.alibaba.cloud.nacos.event.NacosDiscoveryInfoInitializedEvent; -import com.alibaba.cloud.nacos.registry.NacosAutoServiceRegistration; import com.alibaba.cloud.nacos.registry.NacosRegistration; import com.alibaba.nacos.api.exception.NacosException; import com.alibaba.nacos.api.naming.NamingMaintainService; import com.alibaba.nacos.api.naming.NamingService; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.cloud.client.discovery.event.InstancePreRegisteredEvent; import org.springframework.cloud.client.serviceregistry.Registration; import org.springframework.context.event.EventListener; @@ -41,15 +39,14 @@ import static org.springframework.beans.BeanUtils.copyProperties; */ public class NacosServiceManager { + private static final Logger log = LoggerFactory.getLogger(NacosServiceManager.class); + private NacosDiscoveryProperties nacosDiscoveryPropertiesCache; private NamingService namingService; private NamingMaintainService namingMaintainService; - @Autowired - private Optional nacosAutoServiceRegistrationOptional; - public NamingService getNamingService(Properties properties) { if (Objects.isNull(this.namingService)) { buildNamingService(properties); @@ -114,13 +111,10 @@ public class NacosServiceManager { } } - private void reBuildNacosService(Properties nacosProperties) { - namingService = createNewNamingService(nacosProperties); - namingMaintainService = createNamingMaintainService(nacosProperties); - } - public void nacosServiceShutDown() throws NacosException { this.namingService.shutDown(); + namingService = null; + namingMaintainService = null; } @EventListener @@ -137,19 +131,4 @@ public class NacosServiceManager { } } - @EventListener - public void onNacosDiscoveryInfoInitializedEvent( - NacosDiscoveryInfoInitializedEvent nacosDiscoveryInfoInitializedEvent) { - NacosDiscoveryProperties nacosDiscoveryProperties = nacosDiscoveryInfoInitializedEvent - .getSource(); - if (isNacosDiscoveryInfoChanged(nacosDiscoveryProperties) - && nacosAutoServiceRegistrationOptional.isPresent()) { - NacosAutoServiceRegistration nacosAutoServiceRegistration = nacosAutoServiceRegistrationOptional - .get(); - nacosAutoServiceRegistration.stop(); - reBuildNacosService(nacosDiscoveryProperties.getNacosProperties()); - nacosAutoServiceRegistration.start(); - } - } - } diff --git a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/event/NacosDiscoveryInfoInitializedEvent.java b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/event/NacosDiscoveryInfoChangedEvent.java similarity index 89% rename from spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/event/NacosDiscoveryInfoInitializedEvent.java rename to spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/event/NacosDiscoveryInfoChangedEvent.java index 0cca5718..4e922e81 100644 --- a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/event/NacosDiscoveryInfoInitializedEvent.java +++ b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/event/NacosDiscoveryInfoChangedEvent.java @@ -23,9 +23,9 @@ import org.springframework.context.ApplicationEvent; /** * @author yuhuangbin */ -public class NacosDiscoveryInfoInitializedEvent extends ApplicationEvent { +public class NacosDiscoveryInfoChangedEvent extends ApplicationEvent { - public NacosDiscoveryInfoInitializedEvent( + public NacosDiscoveryInfoChangedEvent( NacosDiscoveryProperties nacosDiscoveryProperties) { super(nacosDiscoveryProperties); } diff --git a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/registry/NacosAutoServiceRegistration.java b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/registry/NacosAutoServiceRegistration.java index 649ddd67..097ddc85 100644 --- a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/registry/NacosAutoServiceRegistration.java +++ b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/registry/NacosAutoServiceRegistration.java @@ -16,6 +16,7 @@ package com.alibaba.cloud.nacos.registry; +import com.alibaba.cloud.nacos.event.NacosDiscoveryInfoChangedEvent; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -23,6 +24,7 @@ import org.springframework.cloud.client.serviceregistry.AbstractAutoServiceRegis import org.springframework.cloud.client.serviceregistry.AutoServiceRegistrationProperties; import org.springframework.cloud.client.serviceregistry.Registration; import org.springframework.cloud.client.serviceregistry.ServiceRegistry; +import org.springframework.context.event.EventListener; import org.springframework.util.Assert; import org.springframework.util.StringUtils; @@ -102,4 +104,14 @@ public class NacosAutoServiceRegistration return StringUtils.isEmpty(appName) ? super.getAppName() : appName; } + @EventListener + public void onNacosDiscoveryInfoChangedEvent(NacosDiscoveryInfoChangedEvent event) { + restart(); + } + + private void restart() { + this.stop(); + this.start(); + } + } diff --git a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/ribbon/NacosRibbonClientConfiguration.java b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/ribbon/NacosRibbonClientConfiguration.java index 712e6a42..a6294e87 100644 --- a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/ribbon/NacosRibbonClientConfiguration.java +++ b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/ribbon/NacosRibbonClientConfiguration.java @@ -17,7 +17,6 @@ package com.alibaba.cloud.nacos.ribbon; import com.alibaba.cloud.nacos.NacosDiscoveryProperties; -import com.alibaba.cloud.nacos.NacosServiceManager; import com.netflix.client.config.IClientConfig; import com.netflix.loadbalancer.ServerList; @@ -43,15 +42,13 @@ public class NacosRibbonClientConfiguration { @Bean @ConditionalOnMissingBean public ServerList ribbonServerList(IClientConfig config, - NacosDiscoveryProperties nacosDiscoveryProperties, - NacosServiceManager nacosServiceManager) { + NacosDiscoveryProperties nacosDiscoveryProperties) { if (this.propertiesFactory.isSet(ServerList.class, config.getClientName())) { ServerList serverList = this.propertiesFactory.get(ServerList.class, config, config.getClientName()); return serverList; } - NacosServerList serverList = new NacosServerList(nacosDiscoveryProperties, - nacosServiceManager); + NacosServerList serverList = new NacosServerList(nacosDiscoveryProperties); serverList.initWithNiwsConfig(config); return serverList; } diff --git a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/ribbon/NacosServerList.java b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/ribbon/NacosServerList.java index 1b975881..55928f26 100644 --- a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/ribbon/NacosServerList.java +++ b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/ribbon/NacosServerList.java @@ -20,7 +20,6 @@ import java.util.ArrayList; import java.util.List; import com.alibaba.cloud.nacos.NacosDiscoveryProperties; -import com.alibaba.cloud.nacos.NacosServiceManager; import com.alibaba.nacos.api.naming.pojo.Instance; import com.alibaba.nacos.client.naming.utils.CollectionUtils; import com.netflix.client.config.IClientConfig; @@ -34,14 +33,10 @@ public class NacosServerList extends AbstractServerList { private NacosDiscoveryProperties discoveryProperties; - private NacosServiceManager nacosServiceManager; - private String serviceId; - public NacosServerList(NacosDiscoveryProperties discoveryProperties, - NacosServiceManager nacosServiceManager) { + public NacosServerList(NacosDiscoveryProperties discoveryProperties) { this.discoveryProperties = discoveryProperties; - this.nacosServiceManager = nacosServiceManager; } @Override @@ -57,8 +52,7 @@ public class NacosServerList extends AbstractServerList { private List getServers() { try { String group = discoveryProperties.getGroup(); - List instances = nacosServiceManager - .getNamingService(discoveryProperties.getNacosProperties()) + List instances = discoveryProperties.namingServiceInstance() .selectInstances(serviceId, group, true); return instancesToServerList(instances); } diff --git a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/test/java/com/alibaba/cloud/nacos/ribbon/NacosServerListTests.java b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/test/java/com/alibaba/cloud/nacos/ribbon/NacosServerListTests.java index 7e56fb8b..16887def 100644 --- a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/test/java/com/alibaba/cloud/nacos/ribbon/NacosServerListTests.java +++ b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/test/java/com/alibaba/cloud/nacos/ribbon/NacosServerListTests.java @@ -57,8 +57,7 @@ public class NacosServerListTests { when(namingService.selectInstances(anyString(), eq("DEFAULT"), eq(true))) .thenReturn(null); - NacosServerList serverList = new NacosServerList(nacosDiscoveryProperties, - nacosServiceManager); + NacosServerList serverList = new NacosServerList(nacosDiscoveryProperties); List servers = serverList.getInitialListOfServers(); assertThat(servers).isEmpty(); } @@ -87,8 +86,7 @@ public class NacosServerListTests { IClientConfig clientConfig = mock(IClientConfig.class); when(clientConfig.getClientName()).thenReturn("test-service"); - NacosServerList serverList = new NacosServerList(nacosDiscoveryProperties, - nacosServiceManager); + NacosServerList serverList = new NacosServerList(nacosDiscoveryProperties); serverList.initWithNiwsConfig(clientConfig); List servers = serverList.getInitialListOfServers(); assertThat(servers).hasSize(1); @@ -125,8 +123,7 @@ public class NacosServerListTests { IClientConfig clientConfig = mock(IClientConfig.class); when(clientConfig.getClientName()).thenReturn("test-service"); - NacosServerList serverList = new NacosServerList(nacosDiscoveryProperties, - nacosServiceManager); + NacosServerList serverList = new NacosServerList(nacosDiscoveryProperties); serverList.initWithNiwsConfig(clientConfig); List servers = serverList.getInitialListOfServers(); assertThat(servers).hasSize(1); @@ -167,8 +164,7 @@ public class NacosServerListTests { IClientConfig clientConfig = mock(IClientConfig.class); when(clientConfig.getClientName()).thenReturn("test-service"); - NacosServerList serverList = new NacosServerList(nacosDiscoveryProperties, - nacosServiceManager); + NacosServerList serverList = new NacosServerList(nacosDiscoveryProperties); serverList.initWithNiwsConfig(clientConfig); List servers = serverList.getUpdatedListOfServers(); From df156d4fa2d4524fcd208dda1b5e6468e44b7b4a Mon Sep 17 00:00:00 2001 From: yuhuangbin Date: Sun, 13 Sep 2020 21:57:54 +0800 Subject: [PATCH 3/5] fix --- .../alibaba/cloud/nacos/registry/NacosServiceRegistry.java | 6 +++--- .../registry/NacosServiceRegistryAutoConfiguration.java | 6 ++---- 2 files changed, 5 insertions(+), 7 deletions(-) diff --git a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/registry/NacosServiceRegistry.java b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/registry/NacosServiceRegistry.java index 280648e3..0efd8642 100644 --- a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/registry/NacosServiceRegistry.java +++ b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/registry/NacosServiceRegistry.java @@ -27,6 +27,7 @@ import com.alibaba.nacos.api.naming.pojo.Instance; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.cloud.client.serviceregistry.Registration; import org.springframework.cloud.client.serviceregistry.ServiceRegistry; import org.springframework.util.StringUtils; @@ -44,12 +45,11 @@ public class NacosServiceRegistry implements ServiceRegistry { private final NacosDiscoveryProperties nacosDiscoveryProperties; + @Autowired private NacosServiceManager nacosServiceManager; - public NacosServiceRegistry(NacosDiscoveryProperties nacosDiscoveryProperties, - NacosServiceManager nacosServiceManager) { + public NacosServiceRegistry(NacosDiscoveryProperties nacosDiscoveryProperties) { this.nacosDiscoveryProperties = nacosDiscoveryProperties; - this.nacosServiceManager = nacosServiceManager; } @Override diff --git a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/registry/NacosServiceRegistryAutoConfiguration.java b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/registry/NacosServiceRegistryAutoConfiguration.java index 854b7772..c51c085e 100644 --- a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/registry/NacosServiceRegistryAutoConfiguration.java +++ b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/registry/NacosServiceRegistryAutoConfiguration.java @@ -20,7 +20,6 @@ import java.util.List; import com.alibaba.cloud.nacos.ConditionalOnNacosDiscoveryEnabled; import com.alibaba.cloud.nacos.NacosDiscoveryProperties; -import com.alibaba.cloud.nacos.NacosServiceManager; import com.alibaba.cloud.nacos.discovery.NacosDiscoveryAutoConfiguration; import org.springframework.beans.factory.ObjectProvider; @@ -51,9 +50,8 @@ public class NacosServiceRegistryAutoConfiguration { @Bean public NacosServiceRegistry nacosServiceRegistry( - NacosDiscoveryProperties nacosDiscoveryProperties, - NacosServiceManager nacosServiceManager) { - return new NacosServiceRegistry(nacosDiscoveryProperties, nacosServiceManager); + NacosDiscoveryProperties nacosDiscoveryProperties) { + return new NacosServiceRegistry(nacosDiscoveryProperties); } @Bean From 5b0d53388bfcbf8ea45638219c8cd3b4dd19f17f Mon Sep 17 00:00:00 2001 From: yuhuangbin Date: Mon, 14 Sep 2020 08:57:08 +0800 Subject: [PATCH 4/5] sentinel NacosDataSourceFactoryBean enhance --- .../factorybean/NacosDataSourceFactoryBean.java | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/spring-cloud-alibaba-starters/spring-cloud-alibaba-sentinel-datasource/src/main/java/com/alibaba/cloud/sentinel/datasource/factorybean/NacosDataSourceFactoryBean.java b/spring-cloud-alibaba-starters/spring-cloud-alibaba-sentinel-datasource/src/main/java/com/alibaba/cloud/sentinel/datasource/factorybean/NacosDataSourceFactoryBean.java index a0eda74e..6d70e710 100644 --- a/spring-cloud-alibaba-starters/spring-cloud-alibaba-sentinel-datasource/src/main/java/com/alibaba/cloud/sentinel/datasource/factorybean/NacosDataSourceFactoryBean.java +++ b/spring-cloud-alibaba-starters/spring-cloud-alibaba-sentinel-datasource/src/main/java/com/alibaba/cloud/sentinel/datasource/factorybean/NacosDataSourceFactoryBean.java @@ -67,8 +67,12 @@ public class NacosDataSourceFactoryBean implements FactoryBean if (!StringUtils.isEmpty(this.namespace)) { properties.setProperty(PropertyKeyConst.NAMESPACE, this.namespace); } - properties.setProperty(PropertyKeyConst.USERNAME, this.username); - properties.setProperty(PropertyKeyConst.PASSWORD, this.password); + if (!StringUtils.isEmpty(this.username)) { + properties.setProperty(PropertyKeyConst.USERNAME, this.username); + } + if (!StringUtils.isEmpty(this.password)) { + properties.setProperty(PropertyKeyConst.PASSWORD, this.password); + } return new NacosDataSource(properties, groupId, dataId, converter); } From b638480cf7a5fac11f408c2f507f33e4e41047e2 Mon Sep 17 00:00:00 2001 From: yuhuangbin Date: Mon, 14 Sep 2020 09:40:19 +0800 Subject: [PATCH 5/5] fix test --- .../nacos/ribbon/NacosServerListTests.java | 21 ++++--------------- 1 file changed, 4 insertions(+), 17 deletions(-) diff --git a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/test/java/com/alibaba/cloud/nacos/ribbon/NacosServerListTests.java b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/test/java/com/alibaba/cloud/nacos/ribbon/NacosServerListTests.java index 16887def..1c6e65d9 100644 --- a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/test/java/com/alibaba/cloud/nacos/ribbon/NacosServerListTests.java +++ b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/test/java/com/alibaba/cloud/nacos/ribbon/NacosServerListTests.java @@ -23,7 +23,6 @@ import java.util.List; import java.util.stream.Collectors; import com.alibaba.cloud.nacos.NacosDiscoveryProperties; -import com.alibaba.cloud.nacos.NacosServiceManager; import com.alibaba.cloud.nacos.test.NacosMockTest; import com.alibaba.nacos.api.naming.NamingService; import com.alibaba.nacos.api.naming.pojo.Instance; @@ -49,11 +48,8 @@ public class NacosServerListTests { NacosDiscoveryProperties.class); NamingService namingService = mock(NamingService.class); - NacosServiceManager nacosServiceManager = mock(NacosServiceManager.class); - when(nacosServiceManager - .getNamingService(nacosDiscoveryProperties.getNacosProperties())) - .thenReturn(namingService); + when(nacosDiscoveryProperties.namingServiceInstance()).thenReturn(namingService); when(namingService.selectInstances(anyString(), eq("DEFAULT"), eq(true))) .thenReturn(null); @@ -72,13 +68,10 @@ public class NacosServerListTests { NacosDiscoveryProperties nacosDiscoveryProperties = mock( NacosDiscoveryProperties.class); - NacosServiceManager nacosServiceManager = mock(NacosServiceManager.class); NamingService namingService = mock(NamingService.class); - when(nacosServiceManager - .getNamingService(nacosDiscoveryProperties.getNacosProperties())) - .thenReturn(namingService); + when(nacosDiscoveryProperties.namingServiceInstance()).thenReturn(namingService); when(nacosDiscoveryProperties.getGroup()).thenReturn("DEFAULT"); when(nacosDiscoveryProperties.getGroup()).thenReturn("DEFAULT"); when(namingService.selectInstances(eq("test-service"), eq("DEFAULT"), eq(true))) @@ -109,13 +102,10 @@ public class NacosServerListTests { NacosDiscoveryProperties nacosDiscoveryProperties = mock( NacosDiscoveryProperties.class); - NacosServiceManager nacosServiceManager = mock(NacosServiceManager.class); NamingService namingService = mock(NamingService.class); - when(nacosServiceManager - .getNamingService(nacosDiscoveryProperties.getNacosProperties())) - .thenReturn(namingService); + when(nacosDiscoveryProperties.namingServiceInstance()).thenReturn(namingService); when(nacosDiscoveryProperties.getGroup()).thenReturn("DEFAULT"); when(namingService.selectInstances(eq("test-service"), eq("DEFAULT"), eq(true))) .thenReturn(instances.stream().filter(Instance::isHealthy) @@ -150,13 +140,10 @@ public class NacosServerListTests { NacosDiscoveryProperties nacosDiscoveryProperties = mock( NacosDiscoveryProperties.class); - NacosServiceManager nacosServiceManager = mock(NacosServiceManager.class); NamingService namingService = mock(NamingService.class); - when(nacosServiceManager - .getNamingService(nacosDiscoveryProperties.getNacosProperties())) - .thenReturn(namingService); + when(nacosDiscoveryProperties.namingServiceInstance()).thenReturn(namingService); when(nacosDiscoveryProperties.getGroup()).thenReturn("DEFAULT"); when(namingService.selectInstances(eq("test-service"), eq("DEFAULT"), eq(true))) .thenReturn(instances.stream().filter(Instance::isHealthy)