@Override public void destroy() { super.destroy(); try { zkClient.close(); } catch (Exception e) { LOGGER.warn("Failed to close zookeeper client " + getNode() + ", cause: " + e.getMessage(), e); } } }
@Override protected void doUnRegister(Node node) { zkClient.delete(node.toFullString()); }
@Override protected void doUnsubscribe(Node node, NotifyListener listener) { ConcurrentMap<NotifyListener, ChildListener> listeners = zkListeners.get(node); if (listeners != null) { ChildListener zkListener = listeners.get(listener); if (zkListener != null) { List<NodeType> listenNodeTypes = node.getListenNodeTypes(); if (CollectionUtils.isEmpty(listenNodeTypes)) { return; } for (NodeType listenNodeType : listenNodeTypes) { String listenNodePath = NodeRegistryUtils.getNodeTypePath(clusterName, listenNodeType); zkClient.removeChildListener(listenNodePath, zkListener); } } } }
@Override protected void doSubscribe(Node node, NotifyListener listener) { List<NodeType> listenNodeTypes = node.getListenNodeTypes(); if (CollectionUtils.isEmpty(listenNodeTypes)) { return; } for (NodeType listenNodeType : listenNodeTypes) { String listenNodePath = NodeRegistryUtils.getNodeTypePath(clusterName, listenNodeType); ChildListener zkListener = addZkListener(node, listener); // 为自己关注的 节点 添加监听 List<String> children = zkClient.addChildListener(listenNodePath, zkListener); if (CollectionUtils.isNotEmpty(children)) { List<Node> listenedNodes = new ArrayList<Node>(); for (String child : children) { Node listenedNode = NodeRegistryUtils.parse(listenNodePath + "/" + child); listenedNodes.add(listenedNode); } notify(NotifyEvent.ADD, listenedNodes, listener); cachedChildrenNodeMap.put(listenNodePath, children); } } }
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 doUnsubscribe(Node node, NotifyListener listener) { ConcurrentMap<NotifyListener, ChildListener> listeners = zkListeners.get(node); if (listeners != null) { ChildListener zkListener = listeners.get(listener); if (zkListener != null) { List<NodeType> listenNodeTypes = node.getListenNodeTypes(); if (CollectionUtils.isEmpty(listenNodeTypes)) { return; } for (NodeType listenNodeType : listenNodeTypes) { String listenNodePath = NodeRegistryUtils.getNodeTypePath(clusterName, listenNodeType); zkClient.removeChildListener(listenNodePath, zkListener); } } } }
@Override protected void doSubscribe(Node node, NotifyListener listener) { List<NodeType> listenNodeTypes = node.getListenNodeTypes(); if (CollectionUtils.isEmpty(listenNodeTypes)) { return; } for (NodeType listenNodeType : listenNodeTypes) { String listenNodePath = NodeRegistryUtils.getNodeTypePath(clusterName, listenNodeType); ChildListener zkListener = addZkListener(node, listener); // 为自己关注的 节点 添加监听 List<String> children = zkClient.addChildListener(listenNodePath, zkListener); if (CollectionUtils.isNotEmpty(children)) { List<Node> listenedNodes = new ArrayList<Node>(); for (String child : children) { Node listenedNode = NodeRegistryUtils.parse(listenNodePath + "/" + child); listenedNodes.add(listenedNode); } notify(NotifyEvent.ADD, listenedNodes, listener); cachedChildrenNodeMap.put(listenNodePath, children); } } }
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 destroy() { super.destroy(); try { zkClient.close(); } catch (Exception e) { LOGGER.warn("Failed to close zookeeper client " + getNode() + ", cause: " + e.getMessage(), e); } } }
@Override protected void doUnRegister(Node node) { zkClient.delete(node.toFullString()); }
@Override protected void doUnsubscribe(Node node, NotifyListener listener) { ConcurrentMap<NotifyListener, ChildListener> listeners = zkListeners.get(node); if (listeners != null) { ChildListener zkListener = listeners.get(listener); if (zkListener != null) { List<NodeType> listenNodeTypes = node.getListenNodeTypes(); if (CollectionUtils.isEmpty(listenNodeTypes)) { return; } for (NodeType listenNodeType : listenNodeTypes) { String listenNodePath = NodeRegistryUtils.getNodeTypePath(clusterName, listenNodeType); zkClient.removeChildListener(listenNodePath, zkListener); } } } }
@Override protected void doSubscribe(Node node, NotifyListener listener) { List<NodeType> listenNodeTypes = node.getListenNodeTypes(); if (CollectionUtils.isEmpty(listenNodeTypes)) { return; } for (NodeType listenNodeType : listenNodeTypes) { String listenNodePath = NodeRegistryUtils.getNodeTypePath(clusterName, listenNodeType); ChildListener zkListener = addZkListener(node, listener); // 为自己关注的 节点 添加监听 List<String> children = zkClient.addChildListener(listenNodePath, zkListener); if (CollectionUtils.isNotEmpty(children)) { List<Node> listenedNodes = new ArrayList<Node>(); for (String child : children) { Node listenedNode = NodeRegistryUtils.parse(listenNodePath + "/" + child); listenedNodes.add(listenedNode); } notify(NotifyEvent.ADD, listenedNodes, listener); cachedChildrenNodeMap.put(listenNodePath, children); } } }
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 destroy() { super.destroy(); try { zkClient.close(); } catch (Exception e) { LOGGER.warn("Failed to close zookeeper client " + getNode() + ", cause: " + e.getMessage(), e); } } }
@Override protected void doUnRegister(Node node) { zkClient.delete(node.toFullString()); }