use of com.networknt.registry.support.command.ServiceListener in project light-4j by networknt.
the class ZooKeeperRegistryTest method subAndUnsubService.
@Test
public void subAndUnsubService() throws Exception {
ServiceListener serviceListener = new ServiceListener() {
@Override
public void notifyService(URL refUrl, URL registryUrl, List<URL> urls) {
if (!urls.isEmpty()) {
Assert.assertTrue(urls.contains(serviceUrl));
}
}
};
registry.subscribeService(clientUrl, serviceListener);
Assert.assertTrue(containsServiceListener(clientUrl, serviceListener));
registry.doRegister(serviceUrl);
registry.doAvailable(serviceUrl);
Thread.sleep(2000);
registry.unsubscribeService(clientUrl, serviceListener);
Assert.assertFalse(containsServiceListener(clientUrl, serviceListener));
}
use of com.networknt.registry.support.command.ServiceListener in project light-4j by networknt.
the class ConsulRegistryTest method subAndUnsubService.
@Test
public void subAndUnsubService() throws Exception {
ServiceListener serviceListener = createNewServiceListener(serviceUrl);
ServiceListener serviceListener2 = createNewServiceListener(serviceUrl);
registry.subscribeService(clientUrl, serviceListener);
registry.subscribeService(clientUrl2, serviceListener2);
Assert.assertTrue(containsServiceListener(serviceUrl, clientUrl, serviceListener));
Assert.assertTrue(containsServiceListener(serviceUrl, clientUrl2, serviceListener2));
registry.doRegister(serviceUrl);
registry.doRegister(serviceUrl2);
registry.doAvailable(null);
Thread.sleep(sleepTime);
registry.unsubscribeService(clientUrl, serviceListener);
Assert.assertFalse(containsServiceListener(serviceUrl, clientUrl, serviceListener));
Assert.assertTrue(containsServiceListener(serviceUrl, clientUrl2, serviceListener2));
registry.unsubscribeService(clientUrl2, serviceListener2);
Assert.assertFalse(containsServiceListener(serviceUrl, clientUrl2, serviceListener2));
}
use of com.networknt.registry.support.command.ServiceListener in project light-4j by networknt.
the class ZooKeeperRegistry method subscribeService.
@Override
protected void subscribeService(final URL url, final ServiceListener serviceListener) {
try {
clientLock.lock();
ConcurrentHashMap<ServiceListener, IZkChildListener> childChangeListeners = serviceListeners.get(url);
if (childChangeListeners == null) {
serviceListeners.putIfAbsent(url, new ConcurrentHashMap<ServiceListener, IZkChildListener>());
childChangeListeners = serviceListeners.get(url);
}
IZkChildListener zkChildListener = childChangeListeners.get(serviceListener);
if (zkChildListener == null) {
childChangeListeners.putIfAbsent(serviceListener, new IZkChildListener() {
@Override
public void handleChildChange(String parentPath, List<String> currentChilds) {
serviceListener.notifyService(url, getUrl(), nodeChildsToUrls(parentPath, currentChilds));
if (logger.isInfoEnabled())
logger.info(String.format("[ZooKeeperRegistry] service list change: path=%s, currentChilds=%s", parentPath, currentChilds.toString()));
}
});
zkChildListener = childChangeListeners.get(serviceListener);
}
// prevent old node unregistered
removeNode(url, ZkNodeType.CLIENT);
createNode(url, ZkNodeType.CLIENT);
String serverTypePath = ZkUtils.toNodeTypePath(url, ZkNodeType.AVAILABLE_SERVER);
client.subscribeChildChanges(serverTypePath, zkChildListener);
if (logger.isInfoEnabled())
logger.info(String.format("[ZooKeeperRegistry] subscribe service: path=%s, info=%s", ZkUtils.toNodePath(url, ZkNodeType.AVAILABLE_SERVER), url.toFullStr()));
} catch (Throwable e) {
throw new FrameworkException(new Status(SUBSCRIBE_ZOOKEEPER_SERVICE_ERROR, url, getUrl(), e.getMessage()), e);
} finally {
clientLock.unlock();
}
}
use of com.networknt.registry.support.command.ServiceListener in project light-4j by networknt.
the class ZooKeeperRegistry method unsubscribeService.
@Override
protected void unsubscribeService(URL url, ServiceListener serviceListener) {
try {
clientLock.lock();
Map<ServiceListener, IZkChildListener> childChangeListeners = serviceListeners.get(url);
if (childChangeListeners != null) {
IZkChildListener zkChildListener = childChangeListeners.get(serviceListener);
if (zkChildListener != null) {
client.unsubscribeChildChanges(ZkUtils.toNodeTypePath(url, ZkNodeType.CLIENT), zkChildListener);
childChangeListeners.remove(serviceListener);
}
}
} catch (Throwable e) {
throw new FrameworkException(new Status(UNSUBSCRIBE_ZOOKEEPER_SERVICE_ERROR, url, getUrl(), e.getMessage()), e);
} finally {
clientLock.unlock();
}
}
Aggregations