use of org.apache.dubbo.registry.NotifyListener in project dubbo by alibaba.
the class MultipleRegistry2S2RTest method testSubscription.
@Test
public void testSubscription() throws InterruptedException {
URL serviceUrl = URL.valueOf("http2://multiple/" + SERVICE2_NAME + "?notify=false&methods=test1,test2&category=providers");
// URL serviceUrl2 = URL.valueOf("http2://multiple2/" + SERVICE_NAME + "?notify=false&methods=test1,test2&category=providers");
multipleRegistry.register(serviceUrl);
String path = "/dubbo/" + SERVICE2_NAME + "/providers";
List<String> providerList = zookeeperClient.getChildren(path);
Assertions.assertTrue(!providerList.isEmpty());
System.out.println(providerList.get(0));
Assertions.assertNotNull(MultipleRegistryTestUtil.getRedisHashContent(redisServerPort, path, serviceUrl.toFullString()));
final List<URL> list = new ArrayList<URL>();
multipleRegistry.subscribe(serviceUrl, new NotifyListener() {
@Override
public void notify(List<URL> urls) {
System.out.println("invoke notify: " + urls);
list.clear();
list.addAll(urls);
}
});
Thread.sleep(1500);
Assertions.assertEquals(2, list.size());
List<Registry> serviceRegistries = new ArrayList<Registry>(multipleRegistry.getServiceRegistries().values());
serviceRegistries.get(0).unregister(serviceUrl);
Thread.sleep(1500);
Assertions.assertEquals(1, list.size());
List<URL> urls = MultipleRegistryTestUtil.getProviderURLsFromNotifyURLS(list);
Assertions.assertEquals(1, list.size());
Assertions.assertTrue(!"empty".equals(list.get(0).getProtocol()));
serviceRegistries.get(1).unregister(serviceUrl);
Thread.sleep(1500);
Assertions.assertEquals(1, list.size());
urls = MultipleRegistryTestUtil.getProviderURLsFromNotifyURLS(list);
Assertions.assertEquals(1, list.size());
Assertions.assertEquals("empty", list.get(0).getProtocol());
}
use of org.apache.dubbo.registry.NotifyListener in project dubbo by alibaba.
the class ZookeeperRegistry method fetchLatestAddresses.
/**
* When zookeeper connection recovered from a connection loss, it need to fetch the latest provider list.
* re-register watcher is only a side effect and is not mandate.
*/
private void fetchLatestAddresses() {
// subscribe
Map<URL, Set<NotifyListener>> recoverSubscribed = new HashMap<URL, Set<NotifyListener>>(getSubscribed());
if (!recoverSubscribed.isEmpty()) {
if (logger.isInfoEnabled()) {
logger.info("Fetching the latest urls of " + recoverSubscribed.keySet());
}
for (Map.Entry<URL, Set<NotifyListener>> entry : recoverSubscribed.entrySet()) {
URL url = entry.getKey();
for (NotifyListener listener : entry.getValue()) {
removeFailedSubscribed(url, listener);
addFailedSubscribed(url, listener);
}
}
}
}
use of org.apache.dubbo.registry.NotifyListener in project dubbo by alibaba.
the class ZookeeperRegistry method doUnsubscribe.
@Override
public void doUnsubscribe(URL url, NotifyListener listener) {
ConcurrentMap<NotifyListener, ChildListener> listeners = zkListeners.get(url);
if (listeners != null) {
ChildListener zkListener = listeners.remove(listener);
if (zkListener != null) {
if (ANY_VALUE.equals(url.getServiceInterface())) {
String root = toRootPath();
zkClient.removeChildListener(root, zkListener);
} else {
for (String path : toCategoriesPath(url)) {
zkClient.removeChildListener(path, zkListener);
}
}
}
if (listeners.isEmpty()) {
zkListeners.remove(url);
}
}
}
use of org.apache.dubbo.registry.NotifyListener in project dubbo by alibaba.
the class NacosRegistryTest method testIsConformRules.
@Test
public void testIsConformRules() {
NamingService namingService = mock(NacosNamingService.class);
URL serviceUrlWithoutCategory = URL.valueOf("nacos://127.0.0.1:3333/" + serviceInterface + "?interface=" + serviceInterface + "¬ify=false&methods=test1,test2&version=1.0.0&group=default");
try {
String serviceName = "providers:org.apache.dubbo.registry.nacos.NacosService:1.0.0:default";
String category = this.serviceUrl.getParameter(CATEGORY_KEY, DEFAULT_CATEGORY);
URL newUrl = this.serviceUrl.addParameter(CATEGORY_KEY, category);
newUrl = newUrl.addParameter(PROTOCOL_KEY, this.serviceUrl.getProtocol());
newUrl = newUrl.addParameter(PATH_KEY, this.serviceUrl.getPath());
newUrl = newUrl.addParameters(NacosNamingServiceUtils.getNacosPreservedParam(this.serviceUrl));
String ip = newUrl.getHost();
int port = newUrl.getPort();
Instance instance = new Instance();
instance.setIp(ip);
instance.setPort(port);
instance.setMetadata(new HashMap<>(newUrl.getParameters()));
List<Instance> instances = new ArrayList<>();
instances.add(instance);
when(namingService.getAllInstances(serviceName, this.registryUrl.getParameter(GROUP_KEY, Constants.DEFAULT_GROUP))).thenReturn(instances);
String serviceNameWithoutVersion = "providers:org.apache.dubbo.registry.nacos.NacosService:default";
String serviceName1 = "providers:org.apache.dubbo.registry.nacos.NacosService:1.0.0:default";
List<String> serviceNames = new ArrayList<>();
serviceNames.add(serviceNameWithoutVersion);
serviceNames.add(serviceName1);
ListView<String> result = new ListView<>();
result.setData(serviceNames);
when(namingService.getServicesOfServer(1, Integer.MAX_VALUE, registryUrl.getParameter(GROUP_KEY, Constants.DEFAULT_GROUP))).thenReturn(result);
} catch (NacosException e) {
// ignore
}
NacosNamingServiceWrapper nacosNamingServiceWrapper = new NacosNamingServiceWrapper(namingService);
nacosRegistry = new NacosRegistry(this.registryUrl, nacosNamingServiceWrapper);
Set<URL> registered;
nacosRegistry.register(this.serviceUrl);
nacosRegistry.register(serviceUrlWithoutCategory);
registered = nacosRegistry.getRegistered();
assertThat(registered.contains(serviceUrl), is(true));
assertThat(registered.contains(serviceUrlWithoutCategory), is(true));
assertThat(registered.size(), is(2));
URL serviceUrlWithWildcard = URL.valueOf("nacos://127.0.0.1:3333/" + serviceInterface + "?interface=org.apache.dubbo.registry.nacos.NacosService" + "¬ify=false&methods=test1,test2&category=providers&version=*&group=default");
URL serviceUrlWithOutWildcard = URL.valueOf("nacos://127.0.0.1:3333/" + serviceInterface + "?interface=org.apache.dubbo.registry.nacos.NacosService" + "¬ify=false&methods=test1,test2&category=providers&version=1.0.0&group=default");
NotifyListener listener = mock(NotifyListener.class);
nacosRegistry.subscribe(serviceUrlWithWildcard, listener);
nacosRegistry.subscribe(serviceUrlWithOutWildcard, listener);
Map<URL, Set<NotifyListener>> subscribed = nacosRegistry.getSubscribed();
assertThat(subscribed.size(), is(2));
assertThat(subscribed.get(serviceUrlWithOutWildcard).size(), is(1));
assertThat(subscribed.size(), is(2));
assertThat(subscribed.get(serviceUrlWithWildcard).size(), is(1));
}
use of org.apache.dubbo.registry.NotifyListener in project dubbo by alibaba.
the class NacosRegistryTest method testSubscribe.
@Test
public void testSubscribe() {
NamingService namingService = mock(NacosNamingService.class);
try {
String serviceName = "providers:org.apache.dubbo.registry.nacos.NacosService:1.0.0:default";
String category = this.serviceUrl.getParameter(CATEGORY_KEY, DEFAULT_CATEGORY);
URL newUrl = this.serviceUrl.addParameter(CATEGORY_KEY, category);
newUrl = newUrl.addParameter(PROTOCOL_KEY, this.serviceUrl.getProtocol());
newUrl = newUrl.addParameter(PATH_KEY, this.serviceUrl.getPath());
newUrl = newUrl.addParameters(NacosNamingServiceUtils.getNacosPreservedParam(this.serviceUrl));
String ip = newUrl.getHost();
int port = newUrl.getPort();
Instance instance = new Instance();
instance.setIp(ip);
instance.setPort(port);
instance.setMetadata(new HashMap<>(newUrl.getParameters()));
List<Instance> instances = new ArrayList<>();
instances.add(instance);
when(namingService.getAllInstances(serviceName, this.registryUrl.getParameter(GROUP_KEY, Constants.DEFAULT_GROUP))).thenReturn(instances);
} catch (NacosException e) {
// ignore
}
NacosNamingServiceWrapper nacosNamingServiceWrapper = new NacosNamingServiceWrapper(namingService);
nacosRegistry = new NacosRegistry(this.registryUrl, nacosNamingServiceWrapper);
NotifyListener listener = mock(NotifyListener.class);
nacosRegistry.subscribe(serviceUrl, listener);
Map<URL, Set<NotifyListener>> subscribed = nacosRegistry.getSubscribed();
assertThat(subscribed.size(), is(1));
assertThat(subscribed.get(serviceUrl).size(), is(1));
}
Aggregations