@Override public void handleDataDeleted(String dataPath) throws Exception { listener.dataDeleted(dataPath); } };
public void handleChildChange(String parentPath, List<String> currentChildes) throws Exception { listener.childChanged(parentPath, currentChildes); } };
@Override public void handleDataChange(String dataPath, Object data) throws Exception { listener.dataChange(dataPath, data); }
private void fireChangeEvent(String path, Set<ChildListener> listeners) { if (listeners != null && !listeners.isEmpty()) { for (ChildListener listener : listeners) { try { exists(path); List<String> children = getChildren(path); listener.childChanged(path, children); } catch (ZkException e) { if (e.isZkNoNodeException()) { listener.childChanged(path, null); } else { throw e; } } } } }
protected void stateChanged(int state) { for (StateListener stateListener : getSessionListeners()) { stateListener.stateChanged(state); } }
@Override public void nodeChanged() throws Exception { String path = nodeCache.getCurrentData().getPath(); Object data = nodeCache.getCurrentData().getData(); if (data == null) { listener.dataDeleted(path); } else { listener.dataChange(path, data); } } };
public ZookeeperRegistry(final AppContext appContext) { super(appContext); this.clusterName = appContext.getConfig().getClusterName(); this.cachedChildrenNodeMap = new ConcurrentHashMap<String, List<String>>(); ZookeeperTransporter zookeeperTransporter = ServiceLoader.load(ZookeeperTransporter.class, appContext.getConfig()); this.zkClient = zookeeperTransporter.connect(appContext.getConfig()); this.zkListeners = new ConcurrentHashMap<Node, ConcurrentMap<NotifyListener, ChildListener>>(); // 默认是连成功的(用zkclient时候,第一次不会有state changed事件暴露给用户, // 他居然在new ZkClient的时候就直接连接了,给个提供listener的构造函数或者把启动改为start方法都ok呀,蛋疼) appContext.getRegistryStatMonitor().setAvailable(true); zkClient.addStateListener(new StateListener() { @Override public void stateChanged(int state) { if (state == DISCONNECTED) { appContext.getRegistryStatMonitor().setAvailable(false); } else if (state == CONNECTED) { appContext.getRegistryStatMonitor().setAvailable(true); } else if (state == RECONNECTED) { try { appContext.getRegistryStatMonitor().setAvailable(true); recover(); } catch (Exception e) { LOGGER.error(e.getMessage(), e); } } } }); }
@Override protected void doUnRegister(Node node) { zkClient.delete(node.toFullString()); }
@Override public void destroy() { super.destroy(); try { zkClient.close(); } catch (Exception e) { LOGGER.warn("Failed to close zookeeper client " + getNode() + ", cause: " + e.getMessage(), e); } } }
private void fireChangeEvent(String path, Set<ChildListener> listeners) { if (listeners != null && !listeners.isEmpty()) { for (ChildListener listener : listeners) { try { exists(path); List<String> children = getChildren(path); listener.childChanged(path, children); } catch (ZkException e) { if (e.isZkNoNodeException()) { listener.childChanged(path, null); } else { throw e; } } } } }
protected void stateChanged(int state) { for (StateListener stateListener : getSessionListeners()) { stateListener.stateChanged(state); } }
@Override public void nodeChanged() throws Exception { String path = nodeCache.getCurrentData().getPath(); Object data = nodeCache.getCurrentData().getData(); if (data == null) { listener.dataDeleted(path); } else { listener.dataChange(path, data); } } };
public ZookeeperRegistry(final AppContext appContext) { super(appContext); this.clusterName = appContext.getConfig().getClusterName(); this.cachedChildrenNodeMap = new ConcurrentHashMap<String, List<String>>(); ZookeeperTransporter zookeeperTransporter = ServiceLoader.load(ZookeeperTransporter.class, appContext.getConfig()); this.zkClient = zookeeperTransporter.connect(appContext.getConfig()); this.zkListeners = new ConcurrentHashMap<Node, ConcurrentMap<NotifyListener, ChildListener>>(); // 默认是连成功的(用zkclient时候,第一次不会有state changed事件暴露给用户, // 他居然在new ZkClient的时候就直接连接了,给个提供listener的构造函数或者把启动改为start方法都ok呀,蛋疼) appContext.getRegistryStatMonitor().setAvailable(true); zkClient.addStateListener(new StateListener() { @Override public void stateChanged(int state) { if (state == DISCONNECTED) { appContext.getRegistryStatMonitor().setAvailable(false); } else if (state == CONNECTED) { appContext.getRegistryStatMonitor().setAvailable(true); } else if (state == RECONNECTED) { try { appContext.getRegistryStatMonitor().setAvailable(true); recover(); } catch (Exception e) { LOGGER.error(e.getMessage(), e); } } } }); }
@Override public void handleDataDeleted(String dataPath) throws Exception { listener.dataDeleted(dataPath); } };
public void handleChildChange(String parentPath, List<String> currentChildes) throws Exception { listener.childChanged(parentPath, currentChildes); } };
@Override public void handleDataChange(String dataPath, Object data) throws Exception { listener.dataChange(dataPath, data); }
@Override protected void doUnRegister(Node node) { zkClient.delete(node.toFullString()); }
@Override public void destroy() { super.destroy(); try { zkClient.close(); } catch (Exception e) { LOGGER.warn("Failed to close zookeeper client " + getNode() + ", cause: " + e.getMessage(), e); } } }