Netty优雅退出

Netty优雅退出| Id | Title | DateAdded | SourceUrl | PostType | Body | BlogId | Description | DateUpdated | IsMarkdown | EntryName | CreatedTime | IsActive | AutoDesc | AccessPermission |

| -------------| -------------| -------------| -------------| -------------| -------------| -------------| -------------| -------------| -------------| -------------| -------------| -------------| -------------| -------------|
| 15430522| Netty优雅退出| 2021-10-20T20:13:00| | BlogPost|

va优雅退出实现:

public static void main(String[] args) {
Runtime.getRuntime().addShutdownHook(new Thread(()->{
System.out.println("ShutdownHook execute...");
try {
TimeUnit.SECONDS.sleep(3);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("ShutdownHook execute end..");
}));
try {
TimeUnit.SECONDS.sleep(3);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("application out...");
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
application out...
ShutdownHook execute...
ShutdownHook execute end..

1
2
3
4
注意:

ShutdownHook 在JVM Crash、无法接收信号量、kill -9 时并不会被执行;
ShutdownHook 有多个时,执行顺序不保证;
在JVM关闭期间不能动态添加或删除ShutdownHook;
不要在ShutdownHook 中调用System.exit(),会卡住JVM导致进程无法退出。
Netty需要优雅退出的原因:

尽快释放NIO线程和句柄等资源;
需要将积压在发送队列中的待发消息发送完;
正在读或写的消息,需要继续处理;
设置在NioEventLoop线程调度器中的定时任务,需要执行或清理;
Netty优雅退出的三大类操作:

把NIO线程的状态设置为ST_SHUTTING_DOWN,不再处理新的消息;
把发送队列中的消息尽量发送完(不保证全部)、定时任务、用户注册到NIO线程的退出Hook执行完;
资源释放操作:所有Channel的释放、多路复用器的去注册和关闭、所有队列和定时任务的清空取消,最后是EventLoop线程的退出。
误区:
Netty无法保证所有消息队列的消息能处理完,原因:

待发送消息:调用优雅退出方法之后,不会立即关闭链路;
需要发送的消息:在Netty优雅退出执行期间,应用线程仍然有可能继续调用Channel发送消息,这些消息将发送失败;
3.其他Task等无法保证完全执行,看速度。
————————————————
版权声明:本文为CSDN博主「m0_37039331」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/m0_37039331/article/details/84886003

| 648658| | 2021-10-20T20:13:00| false| | 2021-10-20T20:12:57.797| true| va优雅退出实现: public static void main(String[] args) { Runtime.getRuntime().addShutdownHook(new Thread(()->{ System.out.println("ShutdownHook execute...")| Anonymous|
posted @   RalphLauren  阅读(17)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示