Search in sources :

Example 1 with ServiceListener

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));
}
Also used : ServiceListener(com.networknt.registry.support.command.ServiceListener) List(java.util.List) URL(com.networknt.registry.URL)

Example 2 with 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));
}
Also used : ServiceListener(com.networknt.registry.support.command.ServiceListener) Test(org.junit.Test)

Example 3 with ServiceListener

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();
    }
}
Also used : Status(com.networknt.status.Status) ServiceListener(com.networknt.registry.support.command.ServiceListener) FrameworkException(com.networknt.exception.FrameworkException) IZkChildListener(org.I0Itec.zkclient.IZkChildListener)

Example 4 with ServiceListener

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();
    }
}
Also used : Status(com.networknt.status.Status) ServiceListener(com.networknt.registry.support.command.ServiceListener) FrameworkException(com.networknt.exception.FrameworkException) IZkChildListener(org.I0Itec.zkclient.IZkChildListener)

Aggregations

ServiceListener (com.networknt.registry.support.command.ServiceListener)4 FrameworkException (com.networknt.exception.FrameworkException)2 Status (com.networknt.status.Status)2 IZkChildListener (org.I0Itec.zkclient.IZkChildListener)2 URL (com.networknt.registry.URL)1 List (java.util.List)1 Test (org.junit.Test)1