这篇文章主要讲解了“zk服务器异常报警和线程服务关闭机制”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“zk服务器异常报警和线程服务关闭机制”吧!
主要查看ZooKeeperServer
监听与服务器关系类图
疑问:重要线程关闭或中断的时候?这个监听器在什么时候被调用呢?
接口 ZooKeeperServerListener
void notifyStopping(String threadName, int errorCode);
实现类ZooKeeperServerListenerImpl
@Override
public void notifyStopping(String threadName, int exitCode) {
LOG.info("Thread {} exits, error code {}", threadName, exitCode);
zkServer.setState(State.ERROR);
}
报警危机线程ZooKeeperCriticalThread继承了ZooKeeperThread
重新实现了父类方法,调用监听通知方法,改变服务状态
@Override protected void handleException(String threadName, Throwable e) { LOG.error("Severe unrecoverable error, from thread : {}", threadName, e); listener.notifyStopping(threadName, ExitCode.UNEXPECTED_ERROR.getValue()); ServerMetrics.getMetrics().UNRECOVERABLE_ERROR_COUNT.add(1); }
处理器实现ZooKeeperServerShutdownHandler
private final CountDownLatch shutdownLatch;
void handle(State state) { if (state == State.ERROR || state == State.SHUTDOWN) { shutdownLatch.countDown(); } }
把shutdownLatch减去1
1异常处理流程
SessionTrackerImpl 运行中如果遇到异常
catch (InterruptedException e) {
handleException(this.getName(), e);
}
2调用继承类的方法handleException
3方法中调用监听类ZooKeeperServerListener的.notifyStopping通知方法
4通知接口实现ZooKeeperServerListenerImpl具体指定处理
设置服务状态为zkServer.setState(State.ERROR);
5调用zkServer.setState方法,内部调用ZooKeeperServerShutdownHandler处理器方法
6处理器中调用handle方法
void handle(State state) {
if (state == State.ERROR || state == State.SHUTDOWN) {
shutdownLatch.countDown();
}
}
6 计数器关闭ZooKeeperServerMain中注册了关闭服务处理器
// Registers shutdown handler which will be used to know the
// server error or shutdown state changes.
final CountDownLatch shutdownLatch = new CountDownLatch(1);
zkServer.registerServerShutdownHandler(new ZooKeeperServerShutdownHandler(shutdownLatch));
...
containerManager.start();
// Watch status of ZooKeeper server. It will do a graceful shutdown
// if the server is not running or hits an internal error.
shutdownLatch.await();
感谢各位的阅读,以上就是“zk服务器异常报警和线程服务关闭机制”的内容了,经过本文的学习后,相信大家对zk服务器异常报警和线程服务关闭机制这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是亿速云,小编将为大家推送更多相关知识点的文章,欢迎关注!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。