温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

zk服务器异常报警和线程服务关闭机制

发布时间:2021-06-26 10:07:47 来源:亿速云 阅读:207 作者:chen 栏目:大数据

这篇文章主要讲解了“zk服务器异常报警和线程服务关闭机制”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“zk服务器异常报警和线程服务关闭机制”吧!

主要查看ZooKeeperServer

监听与服务器关系类图

zk服务器异常报警和线程服务关闭机制

疑问:重要线程关闭或中断的时候?这个监听器在什么时候被调用呢?

接口 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服务器异常报警和线程服务关闭机制这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是亿速云,小编将为大家推送更多相关知识点的文章,欢迎关注!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

zk
AI