这篇文章主要讲解了“zk服务器异常报警和线程服务关闭机制”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“zk服务器异常报警和线程服务关闭机制”吧!
10年的武陵网站建设经验,针对设计、前端、开发、售后、文案、推广等六对一服务,响应快,48小时及时工作处理。成都全网营销的优势是能够根据用户设备显示端的尺寸不同,自动调整武陵建站的显示方式,使网站能够适用不同显示终端,在浏览器中调整网站的宽度,无论在任何一种浏览器上浏览网站,都能展现优雅布局与设计,从而大程度地提升浏览体验。创新互联公司从事“武陵网站设计”,“武陵网站推广”以来,每个客户项目都认真落实执行。
主要查看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服务器异常报警和线程服务关闭机制这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是创新互联,小编将为大家推送更多相关知识点的文章,欢迎关注!