diff --git a/dubbo-registry/dubbo-registry-api/src/main/java/com/alibaba/dubbo/registry/support/AbstractRegistry.java b/dubbo-registry/dubbo-registry-api/src/main/java/com/alibaba/dubbo/registry/support/AbstractRegistry.java index 9f369f4b6d3581063f49dca7ec0bca0db3de8f12..0fb653df3b74de14a1c4895846506b2c8f08ee3f 100644 --- a/dubbo-registry/dubbo-registry-api/src/main/java/com/alibaba/dubbo/registry/support/AbstractRegistry.java +++ b/dubbo-registry/dubbo-registry-api/src/main/java/com/alibaba/dubbo/registry/support/AbstractRegistry.java @@ -374,26 +374,6 @@ public abstract class AbstractRegistry implements Registry { } protected void notify(URL url, NotifyListener listener, List urls) { - List result = new ArrayList(); - StringBuilder buf = new StringBuilder(); - if (urls != null && urls.size() > 0) { - for (URL u: urls) { - if (UrlUtils.isMatch(url, u)) { - result.add(u); - if (buf.length() > 0) { - buf.append(URL_SEPARATOR); - } - buf.append(u.toFullString()); - } - } - } - properties.setProperty(url.getServiceKey(), buf.toString()); - long version = lastCacheChanged.incrementAndGet(); - if (syncSaveFile) { - doSaveProperties(version); - } else { - registryCacheExecutor.execute(new SaveProperties(version)); - } Map> categoryNotified = notified.get(url); if (categoryNotified == null) { notified.putIfAbsent(url, new ConcurrentHashMap>()); @@ -401,9 +381,36 @@ public abstract class AbstractRegistry implements Registry { } String category = url.getParameter(Constants.CATEGORY_KEY, Constants.DEFAULT_CATEGORY); categoryNotified.put(category, urls); + saveProperties(url); listener.notify(urls); } + private void saveProperties(URL url) { + try { + StringBuilder buf = new StringBuilder(); + Map> categoryNotified = notified.get(url); + if (categoryNotified != null) { + for (List us : categoryNotified.values()) { + for (URL u : us) { + if (buf.length() > 0) { + buf.append(URL_SEPARATOR); + } + buf.append(u.toFullString()); + } + } + } + properties.setProperty(url.getServiceKey(), buf.toString()); + long version = lastCacheChanged.incrementAndGet(); + if (syncSaveFile) { + doSaveProperties(version); + } else { + registryCacheExecutor.execute(new SaveProperties(version)); + } + } catch (Throwable t) { + logger.warn(t.getMessage(), t); + } + } + public void destroy() { if (logger.isInfoEnabled()){ logger.info("Destroy registry:" + getUrl());