Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
  • Loading branch information
呈铭 committed Feb 27, 2024
1 parent 103421b commit bbdd019
Showing 1 changed file with 27 additions and 6 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,8 @@
import java.util.Properties;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;

import static com.alipay.sofa.rpc.common.utils.StringUtils.CONTEXT_SEP;

Expand Down Expand Up @@ -91,7 +93,7 @@ public class NacosRegistry extends Registry {

private NamingService namingService;

private static volatile NacosRegistryProviderObserver providerObserver;
private NacosRegistryProviderObserver providerObserver;

private List<String> defaultCluster;

Expand All @@ -101,6 +103,8 @@ public class NacosRegistry extends Registry {

private Properties nacosConfig = new Properties();

private static final Lock lock = new ReentrantLock();

/**
* Instantiates a new Nacos registry.
*
Expand Down Expand Up @@ -147,10 +151,13 @@ public synchronized void init() {

try {
if (providerObserver == null) {
synchronized (NacosRegistryProviderObserver.class) {
lock.lock();
try {
if (providerObserver == null) {
providerObserver = new NacosRegistryProviderObserver();
}
} finally {
lock.unlock();
}
}

Expand Down Expand Up @@ -280,7 +287,12 @@ public List<ProviderGroup> subscribe(final ConsumerConfig config) {

try {
ProviderInfoListener providerInfoListener = config.getProviderInfoListener();
providerObserver.addProviderListener(config, providerInfoListener);
try {
lock.lock();
providerObserver.addProviderListener(config, providerInfoListener);
}finally {
lock.unlock();
}

EventListener eventListener = event -> {
if (event instanceof NamingEvent) {
Expand All @@ -291,7 +303,12 @@ public List<ProviderGroup> subscribe(final ConsumerConfig config) {
instances = new ArrayList<>();
}
instances.removeIf(i -> !i.isEnabled());
providerObserver.updateProviders(config, instances);
try {
lock.lock();
providerObserver.updateProviders(config, instances);
}finally {
lock.unlock();
}
}
};
namingService.subscribe(serviceName, defaultCluster, eventListener);
Expand Down Expand Up @@ -332,8 +349,12 @@ public void unSubscribe(ConsumerConfig config) {
}
}
}

providerObserver.removeProviderListener(config);
try {
lock.lock();
providerObserver.removeProviderListener(config);
} finally {
lock.unlock();
}
}
}

Expand Down

0 comments on commit bbdd019

Please sign in to comment.