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); } } } }); }
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); } } } }); }
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); } } } }); }