/** * @Title: registerListeners @TitleExplain: 向zk注册监听 @Description: 注册监听 * * @param client * @author wudan-mac */ private void registerListeners(CuratorFramework client) { /* * 注册监听者 */ client .getConnectionStateListenable() .addListener( new ConnectionStateListener() { @Override public void stateChanged( CuratorFramework client, ConnectionState newState) { // 当状态发生变化时通知监听者 logger.debug("CuratorFramework state changed: {}", newState); if (newState == ConnectionState.CONNECTED || newState == ConnectionState.RECONNECTED) { for (IZKListener listener : listeners) { listener.executor(client); logger.debug("Listener {} executed!", listener.getClass().getName()); } } } }); /* *异常处理 */ client .getUnhandledErrorListenable() .addListener( new UnhandledErrorListener() { @Override public void unhandledError(String message, Throwable e) { logger.debug("CuratorFramework unhandledError: {}", message); } }); }
/** * connect ZK, register Watch/unhandle Watch * * @return */ public CuratorFramework mkClient( Map conf, List<String> servers, Object port, String root, final WatcherCallBack watcher) { CuratorFramework fk = Utils.newCurator(conf, servers, port, root); fk.getCuratorListenable() .addListener( new CuratorListener() { @Override public void eventReceived(CuratorFramework _fk, CuratorEvent e) throws Exception { if (e.getType().equals(CuratorEventType.WATCHED)) { WatchedEvent event = e.getWatchedEvent(); watcher.execute(event.getState(), event.getType(), event.getPath()); } } }); fk.getUnhandledErrorListenable() .addListener( new UnhandledErrorListener() { @Override public void unhandledError(String msg, Throwable error) { String errmsg = "Unrecoverable Zookeeper error, halting process: " + msg; LOG.error(errmsg, error); JStormUtils.halt_process(1, "Unrecoverable Zookeeper error"); } }); fk.start(); return fk; }