久久精品精选,精品九九视频,www久久只有这里有精品,亚洲熟女乱色综合一区
    分享

    Spring Boot 2.5 新特性 之 優雅停機

     青苔IT 2021-06-10

    什么是優雅停機

    先來一段簡單的代碼,如下:

    @RestController
    public class DemoController {
    @GetMapping("/demo")
    public String demo() throws InterruptedException {
        // 模擬業務耗時處理流程
    Thread.sleep(20 * 1000L);
    return "hello";
    }
    }
    當我們流量請求到此接口執行業務邏輯的時候,若服務端此時執行關機 (kill),spring boot 默認情況會直接關閉容器(tomcat 等),導致此業務邏輯執行失敗。在一些業務場景下:會出現數據不一致的情況,事務邏輯不會回滾。

    graceful shutdown

    在最新的 spring boot 2.3 版本,內置此功能,不需要再自行擴展容器線程池來處理, 目前 spring boot 嵌入式支持的 web 服務器(Jetty、Reactor Netty、Tomcat 和 Undertow)以及反應式和基于 Servlet 的 web 應用程序都支持優雅停機功能。 我們來看下如何使用:

    當使用server.shutdown=graceful啟用時,在 web 容器關閉時,web 服務器將不再接收新請求,并將等待活動請求完成的緩沖期。

    配置體驗

    此處支持的 shutdown 行為,我們看下 源碼枚舉如下:

    /**
    * Configuration for shutting down a {@link WebServer}.
    * @www.fhadmin.org
    * @since 2.3.0
    */
    public enum Shutdown {

    /**
    * 優雅停機 (限期停機)
    *
    */
    GRACEFUL,

    /**
    * 立即停機
    */
    IMMEDIATE;

    }

    緩沖期 timeout-per-shutdown-phase 配置 

    • 默認時間為 30S, 意味著最大等待 30S,超時候無論線程任務是否執行完畢都會停機處理,一定要合理合理設置。

    • 效果體驗 

      1. 請求服務端接口

      2.  執行關閉應用

      1.  服務端接到關閉指令 

    2020-05-17 18:28:28.940  INFO 60341 --- [extShutdownHook] o.s.b.w.e.tomcat.GracefulShutdown        : Commencing graceful shutdown. Waiting for active requests to complete
    2020-05-17 18:28:45.923  INFO 60341 --- [tomcat-shutdown] o.s.b.w.e.tomcat.GracefulShutdown        : Graceful shutdown complete
    •  接口請求執行完成 

    相關知識 

    1. 關于此處執行kill -2 而不是 kill -9 

    • kill -2 相當于快捷鍵 Ctrl + C 會觸發 Java 的 ShutdownHook 事件處理(優雅停機或者一些后置處理可參考以下源碼)

        //ApplicationContext
      //www.fhadmin.org
    @Override
    public void registerShutdownHook() {
    if (this.shutdownHook == null) {
    // No shutdown hook registered yet.
    this.shutdownHook = new Thread(SHUTDOWN_HOOK_THREAD_NAME) {
    @Override
    public void run() {
    synchronized (startupShutdownMonitor) {
    doClose();
    }
    }
    };
    Runtime.getRuntime().addShutdownHook(this.shutdownHook);
    }
    }

    •  kill -9,暴力美學強制殺死進程,不會執行 ShutdownHook

    1.  通過 actuate 端點實現優雅停機

    POST 請求 /actuator/shutdown 即可執行優雅關機。

    源碼解析

    @Endpoint(id = "shutdown", enableByDefault = false)
    public class ShutdownEndpoint implements ApplicationContextAware {
       
    @WriteOperation
    public Map<String, String> shutdown() {
    Thread thread = new Thread(this::performShutdown);
    thread.setContextClassLoader(getClass().getClassLoader());
    thread.start();
    }

    private void performShutdown() {
    try {
    Thread.sleep(500L);
    }
    catch (InterruptedException ex) {
    Thread.currentThread().interrupt();
    }

    // 此處close 邏輯和上邊 shutdownhook 的處理一樣
    this.context.close();
    }
    }

    1.  不同 web 容器優雅停機行為區別

    容器停機行為取決于具體的 web 容器行為

    web 容器名稱 行為說明
    tomcat 9.0.33+ 停止接收請求,客戶端新請求等待超時。
    Reactor Netty 停止接收請求,客戶端新請求等待超時。
    Undertow 停止接收請求,客戶端新請求直接返回 503。

      本站是提供個人知識管理的網絡存儲空間,所有內容均由用戶發布,不代表本站觀點。請注意甄別內容中的聯系方式、誘導購買等信息,謹防詐騙。如發現有害或侵權內容,請點擊一鍵舉報。
      轉藏 分享 獻花(0

      0條評論

      發表

      請遵守用戶 評論公約

      類似文章 更多

      主站蜘蛛池模板: 宅男噜噜噜66网站高清| 真实国产熟睡乱子伦视频| 在线A毛片免费视频观看| 精品无码国产自产在线观看水浒传 | 亚洲熟妇精品一区二区| 亚洲电影天堂在线国语对白| 亚洲 欧美 国产 制服 动漫 | 日韩人妻无码一区二区三区99| 亚洲国产精品久久久天堂麻豆宅男| 久久精品国产亚洲精品2020| 亚洲成av人片在www鸭子| 暖暖 在线 日本 免费 中文| 天天夜碰日日摸日日澡| 亚洲精品人成网线在播放VA| 日韩欧国产精品一区综合无码| 蜜桃视频一区二区在线观看| 久久AV无码精品人妻糸列| 亚洲高清国产拍精品5G| 日韩av片无码一区二区不卡| 99热国产这里只有精品9| 亚洲色拍拍噜噜噜最新网站| 亚洲一卡2卡3卡4卡精品| 在线视频中文字幕二区| 狠狠色噜噜狠狠狠狠AV| 宾馆人妻4P互换视频| 亚洲精品亚洲人成在线观看| 欧洲卡一卡二卡三爱区| 亚洲成人av免费一区| 国产欧美日韩一区二区三区| 国产美女MM131爽爽爽| 日韩人妻精品中文字幕| 人人妻人人藻人人爽欧美一区 | 国产亚洲一区二区在线观看 | 久久99精品久久久久久齐齐| 国产片AV国语在线观看手机版| 亚洲国产成人久久久网站| 国产卡一卡二卡三精品| 亚洲色欲色欱WWW在线| 国产麻豆成人传媒免费观看| 国产V片在线播放免费无码| 97人妻中文字幕总站|