This is an automated email from the ASF dual-hosted git repository.
liujun pushed a commit to branch 3.2
in repository https://gitbox.apache.org/repos/asf/dubbo.git
The following commit(s) were added to refs/heads/3.2 by this push:
new d11616c4bf Support nacos disable subscribe legacy service name (#11887)
d11616c4bf is described below
commit d11616c4bf5f164b7773dede501cef93e2bfa4cb
Author: Albumen Kevin <[email protected]>
AuthorDate: Mon Apr 10 09:34:26 2023 +0800
Support nacos disable subscribe legacy service name (#11887)
---
.../dubbo/common/constants/LoggerCodeConstants.java | 2 ++
.../registry/nacos/NacosAggregateListener.java | 21 +++++++++++++++++++++
.../apache/dubbo/registry/nacos/NacosRegistry.java | 14 +++++++++-----
3 files changed, 32 insertions(+), 5 deletions(-)
diff --git
a/dubbo-common/src/main/java/org/apache/dubbo/common/constants/LoggerCodeConstants.java
b/dubbo-common/src/main/java/org/apache/dubbo/common/constants/LoggerCodeConstants.java
index 0682c5233d..0a3bfa2125 100644
---
a/dubbo-common/src/main/java/org/apache/dubbo/common/constants/LoggerCodeConstants.java
+++
b/dubbo-common/src/main/java/org/apache/dubbo/common/constants/LoggerCodeConstants.java
@@ -192,6 +192,8 @@ public interface LoggerCodeConstants {
String REGISTRY_ISTIO_EXCEPTION = "1-41";
+ String REGISTRY_NACOS_SUB_LEGACY = "1-42";
+
// Cluster module 2-x
String CLUSTER_FAILED_SITE_SELECTION = "2-1";
diff --git
a/dubbo-registry/dubbo-registry-nacos/src/main/java/org/apache/dubbo/registry/nacos/NacosAggregateListener.java
b/dubbo-registry/dubbo-registry-nacos/src/main/java/org/apache/dubbo/registry/nacos/NacosAggregateListener.java
index 4eafb9b6f5..b8dcaad92f 100644
---
a/dubbo-registry/dubbo-registry-nacos/src/main/java/org/apache/dubbo/registry/nacos/NacosAggregateListener.java
+++
b/dubbo-registry/dubbo-registry-nacos/src/main/java/org/apache/dubbo/registry/nacos/NacosAggregateListener.java
@@ -16,6 +16,8 @@
*/
package org.apache.dubbo.registry.nacos;
+import org.apache.dubbo.common.logger.ErrorTypeAwareLogger;
+import org.apache.dubbo.common.logger.LoggerFactory;
import org.apache.dubbo.common.utils.ConcurrentHashSet;
import org.apache.dubbo.registry.NotifyListener;
@@ -26,12 +28,19 @@ import java.util.Map;
import java.util.Objects;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.atomic.AtomicBoolean;
+import java.util.regex.Pattern;
import java.util.stream.Collectors;
+import static
org.apache.dubbo.common.constants.LoggerCodeConstants.REGISTRY_NACOS_SUB_LEGACY;
+
public class NacosAggregateListener {
+ private static final ErrorTypeAwareLogger logger =
LoggerFactory.getErrorTypeAwareLogger(NacosAggregateListener.class);
private final NotifyListener notifyListener;
private final Set<String> serviceNames = new ConcurrentHashSet<>();
private final Map<String, List<Instance>> serviceInstances = new
ConcurrentHashMap<>();
+ private final AtomicBoolean warned = new AtomicBoolean(false);
+ private static final Pattern SPLITTED_PATTERN =
Pattern.compile(".*:.*:.*:.*");
public NacosAggregateListener(NotifyListener notifyListener) {
this.notifyListener = notifyListener;
@@ -44,9 +53,21 @@ public class NacosAggregateListener {
} else {
serviceInstances.put(serviceName, instances);
}
+ if (isLegacyName(serviceName) && instances != null &&
+ !instances.isEmpty() && warned.compareAndSet(false, true)) {
+ logger.error(REGISTRY_NACOS_SUB_LEGACY, "", "",
+ "Received not empty notification for legacy service name: " +
serviceName + ", " +
+ "instances: [" +
instances.stream().map(Instance::getIp).collect(Collectors.joining(" ,")) + "].
" +
+ "Please upgrade these Dubbo client(lower than 2.7.3) to the
latest version. " +
+ "Dubbo will remove the support for legacy service name in the
future.");
+ }
return
serviceInstances.values().stream().flatMap(List::stream).collect(Collectors.toList());
}
+ private static boolean isLegacyName(String serviceName) {
+ return !SPLITTED_PATTERN.matcher(serviceName).matches();
+ }
+
public NotifyListener getNotifyListener() {
return notifyListener;
}
diff --git
a/dubbo-registry/dubbo-registry-nacos/src/main/java/org/apache/dubbo/registry/nacos/NacosRegistry.java
b/dubbo-registry/dubbo-registry-nacos/src/main/java/org/apache/dubbo/registry/nacos/NacosRegistry.java
index 269aac4b44..baaa2bf437 100644
---
a/dubbo-registry/dubbo-registry-nacos/src/main/java/org/apache/dubbo/registry/nacos/NacosRegistry.java
+++
b/dubbo-registry/dubbo-registry-nacos/src/main/java/org/apache/dubbo/registry/nacos/NacosRegistry.java
@@ -136,10 +136,12 @@ public class NacosRegistry extends FailbackRegistry {
private final Map<URL, Map<NotifyListener, NacosAggregateListener>>
originToAggregateListener = new ConcurrentHashMap<>();
private final Map<URL, Map<NacosAggregateListener, Map<String,
EventListener>>> nacosListeners = new ConcurrentHashMap<>();
+ private final boolean supportLegacyServiceName;
public NacosRegistry(URL url, NacosNamingServiceWrapper namingService) {
super(url);
this.namingService = namingService;
+ this.supportLegacyServiceName =
url.getParameter("nacos.subscribe.legacy-name", true);
}
@Override
@@ -326,11 +328,13 @@ public class NacosRegistry extends FailbackRegistry {
if (serviceName.isConcrete()) { // is the concrete service name
serviceNames = new LinkedHashSet<>();
serviceNames.add(serviceName.toString());
- // Add the legacy service name since 2.7.6
- String legacySubscribedServiceName =
getLegacySubscribedServiceName(url);
- if (!serviceName.toString().equals(legacySubscribedServiceName)) {
- //avoid duplicated service names
- serviceNames.add(legacySubscribedServiceName);
+ if (supportLegacyServiceName) {
+ // Add the legacy service name since 2.7.6
+ String legacySubscribedServiceName =
getLegacySubscribedServiceName(url);
+ if
(!serviceName.toString().equals(legacySubscribedServiceName)) {
+ //avoid duplicated service names
+ serviceNames.add(legacySubscribedServiceName);
+ }
}
} else {
serviceNames = filterServiceNames(serviceName);