From 56e07c6d2b7f7a5a9b4e242536796be9d40936ea Mon Sep 17 00:00:00 2001 From: yuhuangbin Date: Wed, 9 Sep 2020 15:21:37 +0800 Subject: [PATCH 01/14] fix issue#1701 --- .../NacosDiscoveryClientConfiguration.java | 9 +- .../cloud/nacos/discovery/NacosWatch.java | 125 +++++++++++------- 2 files changed, 78 insertions(+), 56 deletions(-) diff --git a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/discovery/NacosDiscoveryClientConfiguration.java b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/discovery/NacosDiscoveryClientConfiguration.java index 612345165..af722dda2 100644 --- a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/discovery/NacosDiscoveryClientConfiguration.java +++ b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/discovery/NacosDiscoveryClientConfiguration.java @@ -18,8 +18,8 @@ package com.alibaba.cloud.nacos.discovery; import com.alibaba.cloud.nacos.ConditionalOnNacosDiscoveryEnabled; import com.alibaba.cloud.nacos.NacosDiscoveryProperties; +import com.alibaba.cloud.nacos.NacosServiceManager; -import org.springframework.beans.factory.ObjectProvider; import org.springframework.boot.autoconfigure.AutoConfigureAfter; import org.springframework.boot.autoconfigure.AutoConfigureBefore; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; @@ -31,7 +31,6 @@ import org.springframework.cloud.client.discovery.DiscoveryClient; import org.springframework.cloud.client.discovery.simple.SimpleDiscoveryClientAutoConfiguration; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; -import org.springframework.scheduling.TaskScheduler; /** * @author xiaojing @@ -56,9 +55,9 @@ public class NacosDiscoveryClientConfiguration { @ConditionalOnMissingBean @ConditionalOnProperty(value = "spring.cloud.nacos.discovery.watch.enabled", matchIfMissing = true) - public NacosWatch nacosWatch(NacosDiscoveryProperties nacosDiscoveryProperties, - ObjectProvider taskScheduler) { - return new NacosWatch(nacosDiscoveryProperties, taskScheduler); + public NacosWatch nacosWatch(NacosServiceManager nacosServiceManager, + NacosDiscoveryProperties nacosDiscoveryProperties) { + return new NacosWatch(nacosServiceManager, nacosDiscoveryProperties); } } diff --git a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/discovery/NacosWatch.java b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/discovery/NacosWatch.java index b5dfc8e3a..460191138 100644 --- a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/discovery/NacosWatch.java +++ b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/discovery/NacosWatch.java @@ -16,21 +16,28 @@ package com.alibaba.cloud.nacos.discovery; -import java.util.concurrent.ScheduledFuture; +import java.util.Arrays; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.atomic.AtomicBoolean; -import java.util.concurrent.atomic.AtomicLong; import com.alibaba.cloud.nacos.NacosDiscoveryProperties; +import com.alibaba.cloud.nacos.NacosServiceManager; +import com.alibaba.nacos.api.exception.NacosException; +import com.alibaba.nacos.api.naming.NamingService; +import com.alibaba.nacos.api.naming.listener.Event; +import com.alibaba.nacos.api.naming.listener.EventListener; +import com.alibaba.nacos.api.naming.listener.NamingEvent; +import com.alibaba.nacos.api.naming.pojo.Instance; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.ObjectProvider; import org.springframework.cloud.client.discovery.event.HeartbeatEvent; import org.springframework.context.ApplicationEventPublisher; import org.springframework.context.ApplicationEventPublisherAware; import org.springframework.context.SmartLifecycle; -import org.springframework.scheduling.TaskScheduler; -import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler; /** * @author xiaojing @@ -39,44 +46,20 @@ public class NacosWatch implements ApplicationEventPublisherAware, SmartLifecycl private static final Logger log = LoggerFactory.getLogger(NacosWatch.class); - private final NacosDiscoveryProperties properties; - - private final TaskScheduler taskScheduler; - - private final AtomicLong nacosWatchIndex = new AtomicLong(0); + private Map listenerMap = new ConcurrentHashMap<>(16); private final AtomicBoolean running = new AtomicBoolean(false); private ApplicationEventPublisher publisher; - private ScheduledFuture watchFuture; + private NacosServiceManager nacosServiceManager; - public NacosWatch(NacosDiscoveryProperties properties) { - this(properties, getTaskScheduler()); - } + private final NacosDiscoveryProperties properties; - public NacosWatch(NacosDiscoveryProperties properties, TaskScheduler taskScheduler) { + public NacosWatch(NacosServiceManager nacosServiceManager, + NacosDiscoveryProperties properties) { + this.nacosServiceManager = nacosServiceManager; this.properties = properties; - this.taskScheduler = taskScheduler; - } - - /** - * The constructor with {@link NacosDiscoveryProperties} bean and the optional. - * {@link TaskScheduler} bean - * @param properties {@link NacosDiscoveryProperties} bean - * @param taskScheduler the optional {@link TaskScheduler} bean - * @since 2.2.0 - */ - public NacosWatch(NacosDiscoveryProperties properties, - ObjectProvider taskScheduler) { - this(properties, taskScheduler.getIfAvailable(NacosWatch::getTaskScheduler)); - } - - private static ThreadPoolTaskScheduler getTaskScheduler() { - ThreadPoolTaskScheduler taskScheduler = new ThreadPoolTaskScheduler(); - taskScheduler.setBeanName("Nacos-Watch-Task-Scheduler"); - taskScheduler.initialize(); - return taskScheduler; } @Override @@ -98,19 +81,67 @@ public class NacosWatch implements ApplicationEventPublisherAware, SmartLifecycl @Override public void start() { if (this.running.compareAndSet(false, true)) { - this.watchFuture = this.taskScheduler.scheduleWithFixedDelay( - this::nacosServicesWatch, this.properties.getWatchDelay()); + EventListener eventListener = listenerMap.computeIfAbsent(buildKey(), + event -> new EventListener() { + @Override + public void onEvent(Event event) { + if (event instanceof NamingEvent) { + List instances = ((NamingEvent) event) + .getInstances(); + Instance currentInstance = selectCurrentInstance( + instances); + if (Objects.nonNull(currentInstance)) { + resetIfNeeded(currentInstance); + publisher.publishEvent( + new HeartbeatEvent(this, currentInstance)); + } + } + } + }); + + NamingService namingService = nacosServiceManager + .getNamingService(properties.getNacosProperties()); + try { + namingService.subscribe(properties.getService(), properties.getGroup(), + Arrays.asList(properties.getClusterName()), eventListener); + } + catch (Exception e) { + log.error("namingService subscribe failed, properties:{}", properties, e); + } } } + private String buildKey() { + return String.join(":", properties.getService(), properties.getGroup()); + } + + private void resetIfNeeded(Instance instance) { + if (!properties.getMetadata().equals(instance.getMetadata())) { + properties.setMetadata(instance.getMetadata()); + } + } + + private Instance selectCurrentInstance(List instances) { + return instances.stream() + .filter(instance -> properties.getIp().equals(instance.getIp()) + && properties.getPort() == instance.getPort()) + .findFirst().orElse(null); + } + @Override public void stop() { - if (this.running.compareAndSet(true, false) && this.watchFuture != null) { - // shutdown current user-thread, - // then the other daemon-threads will terminate automatic. - ((ThreadPoolTaskScheduler) this.taskScheduler).shutdown(); - - this.watchFuture.cancel(true); + if (this.running.compareAndSet(true, false)) { + EventListener eventListener = listenerMap.get(buildKey()); + NamingService namingService = nacosServiceManager + .getNamingService(properties.getNacosProperties()); + try { + namingService.unsubscribe(properties.getService(), properties.getGroup(), + Arrays.asList(properties.getClusterName()), eventListener); + } + catch (NacosException e) { + log.error("namingService unsubscribe failed, properties:{}", properties, + e); + } } } @@ -124,12 +155,4 @@ public class NacosWatch implements ApplicationEventPublisherAware, SmartLifecycl return 0; } - public void nacosServicesWatch() { - - // nacos doesn't support watch now , publish an event every 30 seconds. - this.publisher.publishEvent( - new HeartbeatEvent(this, nacosWatchIndex.getAndIncrement())); - - } - } From bd2cd3f39468cae824d2b1a65e6882eae9f58cdd Mon Sep 17 00:00:00 2001 From: yuhuangbin Date: Wed, 9 Sep 2020 19:18:45 +0800 Subject: [PATCH 02/14] nacos watch enhance --- .../alibaba/cloud/nacos/discovery/NacosWatch.java | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/discovery/NacosWatch.java b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/discovery/NacosWatch.java index 460191138..d01089eb0 100644 --- a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/discovery/NacosWatch.java +++ b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/discovery/NacosWatch.java @@ -19,7 +19,7 @@ package com.alibaba.cloud.nacos.discovery; import java.util.Arrays; import java.util.List; import java.util.Map; -import java.util.Objects; +import java.util.Optional; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.atomic.AtomicBoolean; @@ -41,6 +41,7 @@ import org.springframework.context.SmartLifecycle; /** * @author xiaojing + * @author yuhuangbin */ public class NacosWatch implements ApplicationEventPublisherAware, SmartLifecycle { @@ -88,13 +89,13 @@ public class NacosWatch implements ApplicationEventPublisherAware, SmartLifecycl if (event instanceof NamingEvent) { List instances = ((NamingEvent) event) .getInstances(); - Instance currentInstance = selectCurrentInstance( + Optional instanceOptional = selectCurrentInstance( instances); - if (Objects.nonNull(currentInstance)) { + instanceOptional.ifPresent(currentInstance -> { resetIfNeeded(currentInstance); publisher.publishEvent( new HeartbeatEvent(this, currentInstance)); - } + }); } } }); @@ -121,11 +122,11 @@ public class NacosWatch implements ApplicationEventPublisherAware, SmartLifecycl } } - private Instance selectCurrentInstance(List instances) { + private Optional selectCurrentInstance(List instances) { return instances.stream() .filter(instance -> properties.getIp().equals(instance.getIp()) && properties.getPort() == instance.getPort()) - .findFirst().orElse(null); + .findFirst(); } @Override From 6d0a80ab0e1cce84d13883e67b36c1e07247d2ad Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=BD=99=E9=BB=84=E5=BD=AC?= Date: Wed, 9 Sep 2020 19:31:44 +0800 Subject: [PATCH 03/14] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 4f946dc4c..cea175e9b 100644 --- a/README.md +++ b/README.md @@ -45,7 +45,7 @@ For more features, please refer to [Roadmap](https://github.com/alibaba/spring-c **[Alibaba Cloud SMS](https://www.aliyun.com/product/sms)**: A messaging service that covers the globe, Alibaba SMS provides convenient, efficient, and intelligent communication capabilities that help businesses quickly contact their customers. -**[Alibaba Cloud SchedulerX](https://www.aliyun.com/product/SchedulerX)**:accurate, highly reliable, and highly available scheduled job scheduling services with response time within seconds.. +**[Alibaba Cloud SchedulerX](https://www.aliyun.com/aliware/schedulerx?spm=5176.10695662.784137.1.4b07363dej23L3)**:accurate, highly reliable, and highly available scheduled job scheduling services with response time within seconds.. For more features please refer to [Roadmap](https://github.com/alibaba/spring-cloud-alibaba/blob/master/Roadmap.md). From fec6c6554c8782e952905da8c37cb6864d361ef8 Mon Sep 17 00:00:00 2001 From: yuhuangbin Date: Thu, 10 Sep 2020 09:54:30 +0800 Subject: [PATCH 04/14] fix --- .../java/com/alibaba/cloud/nacos/discovery/NacosWatch.java | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/discovery/NacosWatch.java b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/discovery/NacosWatch.java index d01089eb0..3371e51db 100644 --- a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/discovery/NacosWatch.java +++ b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/discovery/NacosWatch.java @@ -22,6 +22,7 @@ import java.util.Map; import java.util.Optional; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.atomic.AtomicBoolean; +import java.util.concurrent.atomic.AtomicLong; import com.alibaba.cloud.nacos.NacosDiscoveryProperties; import com.alibaba.cloud.nacos.NacosServiceManager; @@ -51,6 +52,8 @@ public class NacosWatch implements ApplicationEventPublisherAware, SmartLifecycl private final AtomicBoolean running = new AtomicBoolean(false); + private final AtomicLong nacosWatchIndex = new AtomicLong(0); + private ApplicationEventPublisher publisher; private NacosServiceManager nacosServiceManager; @@ -93,9 +96,9 @@ public class NacosWatch implements ApplicationEventPublisherAware, SmartLifecycl instances); instanceOptional.ifPresent(currentInstance -> { resetIfNeeded(currentInstance); - publisher.publishEvent( - new HeartbeatEvent(this, currentInstance)); }); + publisher.publishEvent( + new HeartbeatEvent(this, nacosWatchIndex.getAndIncrement())); } } }); From d7edf9f8ee1c3a541276702f6722b13e5de5a726 Mon Sep 17 00:00:00 2001 From: jacky Date: Thu, 10 Sep 2020 17:30:26 +0800 Subject: [PATCH 05/14] correct spelling --- .../examples/{OderApplication.java => OrderApplication.java} | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) rename spring-cloud-alibaba-examples/seata-example/order-service/src/main/java/com/alibaba/cloud/examples/{OderApplication.java => OrderApplication.java} (92%) diff --git a/spring-cloud-alibaba-examples/seata-example/order-service/src/main/java/com/alibaba/cloud/examples/OderApplication.java b/spring-cloud-alibaba-examples/seata-example/order-service/src/main/java/com/alibaba/cloud/examples/OrderApplication.java similarity index 92% rename from spring-cloud-alibaba-examples/seata-example/order-service/src/main/java/com/alibaba/cloud/examples/OderApplication.java rename to spring-cloud-alibaba-examples/seata-example/order-service/src/main/java/com/alibaba/cloud/examples/OrderApplication.java index b1233273f..33e31a71d 100644 --- a/spring-cloud-alibaba-examples/seata-example/order-service/src/main/java/com/alibaba/cloud/examples/OderApplication.java +++ b/spring-cloud-alibaba-examples/seata-example/order-service/src/main/java/com/alibaba/cloud/examples/OrderApplication.java @@ -25,10 +25,10 @@ import org.springframework.web.client.RestTemplate; * @author xiaojing */ @SpringBootApplication -public class OderApplication { +public class OrderApplication { public static void main(String[] args) { - SpringApplication.run(OderApplication.class, args); + SpringApplication.run(OrderApplication.class, args); } @Bean From f60cb805c8217c10d0b036d6c425bc591f441f90 Mon Sep 17 00:00:00 2001 From: yuhuangbin Date: Fri, 11 Sep 2020 15:32:40 +0800 Subject: [PATCH 06/14] fix --- .../java/com/alibaba/cloud/nacos/discovery/NacosWatch.java | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/discovery/NacosWatch.java b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/discovery/NacosWatch.java index 3371e51db..d01089eb0 100644 --- a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/discovery/NacosWatch.java +++ b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/discovery/NacosWatch.java @@ -22,7 +22,6 @@ import java.util.Map; import java.util.Optional; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.atomic.AtomicBoolean; -import java.util.concurrent.atomic.AtomicLong; import com.alibaba.cloud.nacos.NacosDiscoveryProperties; import com.alibaba.cloud.nacos.NacosServiceManager; @@ -52,8 +51,6 @@ public class NacosWatch implements ApplicationEventPublisherAware, SmartLifecycl private final AtomicBoolean running = new AtomicBoolean(false); - private final AtomicLong nacosWatchIndex = new AtomicLong(0); - private ApplicationEventPublisher publisher; private NacosServiceManager nacosServiceManager; @@ -96,9 +93,9 @@ public class NacosWatch implements ApplicationEventPublisherAware, SmartLifecycl instances); instanceOptional.ifPresent(currentInstance -> { resetIfNeeded(currentInstance); + publisher.publishEvent( + new HeartbeatEvent(this, currentInstance)); }); - publisher.publishEvent( - new HeartbeatEvent(this, nacosWatchIndex.getAndIncrement())); } } }); From b35c05e4fc8affca02891d40de6ffe56b74477c8 Mon Sep 17 00:00:00 2001 From: yuhuangbin Date: Fri, 11 Sep 2020 16:23:02 +0800 Subject: [PATCH 07/14] fix --- .../java/com/alibaba/cloud/nacos/discovery/NacosWatch.java | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/discovery/NacosWatch.java b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/discovery/NacosWatch.java index d01089eb0..e572549a5 100644 --- a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/discovery/NacosWatch.java +++ b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/discovery/NacosWatch.java @@ -22,6 +22,7 @@ import java.util.Map; import java.util.Optional; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.atomic.AtomicBoolean; +import java.util.concurrent.atomic.AtomicLong; import com.alibaba.cloud.nacos.NacosDiscoveryProperties; import com.alibaba.cloud.nacos.NacosServiceManager; @@ -51,6 +52,8 @@ public class NacosWatch implements ApplicationEventPublisherAware, SmartLifecycl private final AtomicBoolean running = new AtomicBoolean(false); + private final AtomicLong nacosWatchIndex = new AtomicLong(0); + private ApplicationEventPublisher publisher; private NacosServiceManager nacosServiceManager; @@ -93,9 +96,9 @@ public class NacosWatch implements ApplicationEventPublisherAware, SmartLifecycl instances); instanceOptional.ifPresent(currentInstance -> { resetIfNeeded(currentInstance); - publisher.publishEvent( - new HeartbeatEvent(this, currentInstance)); }); + publisher.publishEvent( + new HeartbeatEvent(NacosWatch.this, nacosWatchIndex.getAndIncrement())); } } }); From 35c4eac150a4fcb3b59b3fda7e8b7edf87eb9807 Mon Sep 17 00:00:00 2001 From: mercyblitz Date: Fri, 11 Sep 2020 23:08:30 +0800 Subject: [PATCH 08/14] Upgrade the version to be 2.2.2.RELEASE --- pom.xml | 2 +- spring-cloud-alibaba-dependencies/pom.xml | 2 +- .../asciidoc-zh/dependency-management.adoc | 2 +- .../main/asciidoc/dependency-management.adoc | 2 +- .../seata/web/SeataHandlerInterceptor.java | 71 ++++++++++--------- 5 files changed, 40 insertions(+), 39 deletions(-) diff --git a/pom.xml b/pom.xml index 13b06fdda..64b455188 100644 --- a/pom.xml +++ b/pom.xml @@ -80,7 +80,7 @@ - 2.2.2-SNAPSHOT + 2.2.2.RELEASE 2.2.5.RELEASE diff --git a/spring-cloud-alibaba-dependencies/pom.xml b/spring-cloud-alibaba-dependencies/pom.xml index 222576d80..7a1870ce1 100644 --- a/spring-cloud-alibaba-dependencies/pom.xml +++ b/spring-cloud-alibaba-dependencies/pom.xml @@ -18,7 +18,7 @@ Spring Cloud Alibaba Dependencies - 2.2.2-SNAPSHOT + 2.2.2.RELEASE 1.8.0 3.1.0 1.3.0 diff --git a/spring-cloud-alibaba-docs/src/main/asciidoc-zh/dependency-management.adoc b/spring-cloud-alibaba-docs/src/main/asciidoc-zh/dependency-management.adoc index 834bf75c5..5a3dc3334 100644 --- a/spring-cloud-alibaba-docs/src/main/asciidoc-zh/dependency-management.adoc +++ b/spring-cloud-alibaba-docs/src/main/asciidoc-zh/dependency-management.adoc @@ -10,7 +10,7 @@ Spring Cloud Alibaba BOM 包含了它所使用的所有依赖的版本。 com.alibaba.cloud spring-cloud-alibaba-dependencies - 2.2.0.RELEASE + 2.2.2.RELEASE pom import diff --git a/spring-cloud-alibaba-docs/src/main/asciidoc/dependency-management.adoc b/spring-cloud-alibaba-docs/src/main/asciidoc/dependency-management.adoc index ee22c0e4c..789d1aed1 100644 --- a/spring-cloud-alibaba-docs/src/main/asciidoc/dependency-management.adoc +++ b/spring-cloud-alibaba-docs/src/main/asciidoc/dependency-management.adoc @@ -8,7 +8,7 @@ If you’re a Maven Central user, add our BOM to your pom.xml com.alibaba.cloud spring-cloud-alibaba-dependencies - 2.2.0.RELEASE + 2.2.2.RELEASE pom import diff --git a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-seata/src/main/java/com/alibaba/cloud/seata/web/SeataHandlerInterceptor.java b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-seata/src/main/java/com/alibaba/cloud/seata/web/SeataHandlerInterceptor.java index 86d331b05..f7ec7659a 100644 --- a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-seata/src/main/java/com/alibaba/cloud/seata/web/SeataHandlerInterceptor.java +++ b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-seata/src/main/java/com/alibaba/cloud/seata/web/SeataHandlerInterceptor.java @@ -41,45 +41,46 @@ public class SeataHandlerInterceptor implements HandlerInterceptor { .getLogger(SeataHandlerInterceptor.class); @Override - public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) { - String xid = RootContext.getXID(); - String rpcXid = request.getHeader(RootContext.KEY_XID); - if (log.isDebugEnabled()) { - log.debug("xid in RootContext {} xid in RpcContext {}", xid, rpcXid); - } + public boolean preHandle(HttpServletRequest request, HttpServletResponse response, + Object handler) { + String xid = RootContext.getXID(); + String rpcXid = request.getHeader(RootContext.KEY_XID); + if (log.isDebugEnabled()) { + log.debug("xid in RootContext {} xid in RpcContext {}", xid, rpcXid); + } - if (StringUtils.isBlank(xid) && rpcXid != null) { - RootContext.bind(rpcXid); - if (log.isDebugEnabled()) { - log.debug("bind {} to RootContext", rpcXid); - } - } + if (StringUtils.isBlank(xid) && rpcXid != null) { + RootContext.bind(rpcXid); + if (log.isDebugEnabled()) { + log.debug("bind {} to RootContext", rpcXid); + } + } - return true; - } + return true; + } + @Override + public void afterCompletion(HttpServletRequest request, HttpServletResponse response, + Object handler, Exception e) { + if (StringUtils.isNotBlank(RootContext.getXID())) { + String rpcXid = request.getHeader(RootContext.KEY_XID); - @Override - public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception e) { - if (StringUtils.isNotBlank(RootContext.getXID())) { - String rpcXid = request.getHeader(RootContext.KEY_XID); - - if (StringUtils.isEmpty(rpcXid)) { - return; - } + if (StringUtils.isEmpty(rpcXid)) { + return; + } - String unbindXid = RootContext.unbind(); - if (log.isDebugEnabled()) { - log.debug("unbind {} from RootContext", unbindXid); - } - if (!rpcXid.equalsIgnoreCase(unbindXid)) { - log.warn("xid in change during RPC from {} to {}", rpcXid, unbindXid); - if (unbindXid != null) { - RootContext.bind(unbindXid); - log.warn("bind {} back to RootContext", unbindXid); - } - } - } - } + String unbindXid = RootContext.unbind(); + if (log.isDebugEnabled()) { + log.debug("unbind {} from RootContext", unbindXid); + } + if (!rpcXid.equalsIgnoreCase(unbindXid)) { + log.warn("xid in change during RPC from {} to {}", rpcXid, unbindXid); + if (unbindXid != null) { + RootContext.bind(unbindXid); + log.warn("bind {} back to RootContext", unbindXid); + } + } + } + } } From 96c3d2e8adbcdf8e7910a879a22a6ec6292b430d Mon Sep 17 00:00:00 2001 From: mercyblitz Date: Sat, 12 Sep 2020 16:13:18 +0800 Subject: [PATCH 09/14] Upgrade the version to be 2.2.2.RELEASE --- README-zh.md | 2 +- README.md | 2 +- .../java/com/alibaba/cloud/nacos/discovery/NacosWatch.java | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/README-zh.md b/README-zh.md index 5b5bdf636..ca01258e6 100644 --- a/README-zh.md +++ b/README-zh.md @@ -70,7 +70,7 @@ Spring Cloud 使用 Maven 来构建,最快的使用方式是将本项目 clone com.alibaba.cloud spring-cloud-alibaba-dependencies - 2.2.0.RELEASE + 2.2.2.RELEASE pom import diff --git a/README.md b/README.md index cea175e9b..7dd069c56 100644 --- a/README.md +++ b/README.md @@ -71,7 +71,7 @@ These artifacts are available from Maven Central and Spring Release repository v com.alibaba.cloud spring-cloud-alibaba-dependencies - 2.2.1.RELEASE + 2.2.2.RELEASE pom import diff --git a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/discovery/NacosWatch.java b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/discovery/NacosWatch.java index e572549a5..ff9040ae7 100644 --- a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/discovery/NacosWatch.java +++ b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/discovery/NacosWatch.java @@ -97,8 +97,8 @@ public class NacosWatch implements ApplicationEventPublisherAware, SmartLifecycl instanceOptional.ifPresent(currentInstance -> { resetIfNeeded(currentInstance); }); - publisher.publishEvent( - new HeartbeatEvent(NacosWatch.this, nacosWatchIndex.getAndIncrement())); + publisher.publishEvent(new HeartbeatEvent(NacosWatch.this, + nacosWatchIndex.getAndIncrement())); } } }); From 702831cb8fea9520db6890ad5a1e5f4b7c52cc0c Mon Sep 17 00:00:00 2001 From: yuhuangbin Date: Sun, 13 Sep 2020 18:02:36 +0800 Subject: [PATCH 10/14] 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 f3297e8a6..3c8c01c8d 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 bedb4e2c6..9dfc83230 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 000000000..0cca5718e --- /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 11/14] 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 3c8c01c8d..3ee047b4f 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 9dfc83230..c672bbac0 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 0cca5718e..4e922e812 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 649ddd678..097ddc852 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 712e6a422..a6294e875 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 1b9758815..55928f266 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 7e56fb8ba..16887defb 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 12/14] 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 280648e39..0efd86420 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 854b77729..c51c085ed 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 13/14] 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 a0eda74e3..6d70e710a 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 14/14] 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 16887defb..1c6e65d95 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)