From 5a386637a2b2e7cad56e45b0e0290c984807c012 Mon Sep 17 00:00:00 2001 From: Albumen Kevin Date: Thu, 16 Jan 2025 17:30:44 +0800 Subject: [PATCH] Remove duplicated invokers in registry notification --- .../client/ServiceDiscoveryRegistryDirectory.java | 11 +++++++++++ .../dubbo/registry/integration/RegistryDirectory.java | 11 +++++++++++ 2 files changed, 22 insertions(+) diff --git a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/ServiceDiscoveryRegistryDirectory.java b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/ServiceDiscoveryRegistryDirectory.java index b743a1c30ef..e4297c0991f 100644 --- a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/ServiceDiscoveryRegistryDirectory.java +++ b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/ServiceDiscoveryRegistryDirectory.java @@ -340,6 +340,17 @@ private void refreshInvoker(List invokerUrls) { return; } + int originSize = invokerUrls.size(); + invokerUrls = invokerUrls.stream().distinct().collect(Collectors.toList()); + if (invokerUrls.size() != originSize) { + logger.info("Received duplicated invoker urls changed event from registry. " + + "Registry type: instance. " + + "Service Key: " + + getConsumerUrl().getServiceKey() + ". " + + "Notify Urls Size : " + originSize + ". " + + "Distinct Urls Size: " + invokerUrls.size() + "."); + } + // use local reference to avoid NPE as this.urlInvokerMap will be set null concurrently at // destroyAllInvokers(). Map> localUrlInvokerMap = this.urlInvokerMap; diff --git a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/integration/RegistryDirectory.java b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/integration/RegistryDirectory.java index 1eaf26c2c94..09297434ef2 100644 --- a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/integration/RegistryDirectory.java +++ b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/integration/RegistryDirectory.java @@ -305,6 +305,17 @@ private void refreshInvoker(List invokerUrls) { return; } + int originSize = invokerUrls.size(); + invokerUrls = invokerUrls.stream().distinct().collect(Collectors.toList()); + if (invokerUrls.size() != originSize) { + logger.info("Received duplicated invoker urls changed event from registry. " + + "Registry type: interface. " + + "Service Key: " + + getConsumerUrl().getServiceKey() + ". " + + "Notify Urls Size : " + originSize + ". " + + "Distinct Urls Size: " + invokerUrls.size() + "."); + } + // use local reference to avoid NPE as this.urlInvokerMap will be set null concurrently at // destroyAllInvokers(). Map> localUrlInvokerMap = this.urlInvokerMap;