zoukankan      html  css  js  c++  java
  • Netty优雅退出

    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

  • 相关阅读:
    图片延迟加载方法
    mongodb常用命令
    未知尺寸元素水平垂直居中:
    nodejs学习之加密
    nodejs学习之events的使用
    nodejs学习之events
    学习Nodejs之mysql
    PHP之几道面试题
    Jquery学习插件之手风琴
    我的第一篇博客
  • 原文地址:https://www.cnblogs.com/roak/p/15430522.html
Copyright © 2011-2022 走看看