1 優雅關閉的常見作用
最常見的,比如業務開發中,服務突然異常,剛進來的使用者請求還在,通過優雅關閉,給他們 30s 時間繼續執行,以免直接報錯出去。
2 Netty 優雅關閉流程圖
- 修改 NioEventLoop 的 State 标志位
- NioEventLoop 判斷 State 執行退出
先不接活,後盡量幹完手頭的活(先關 boss 後關 worker:非百分百保證)
打斷點,主要看 workGroup 的關閉
- 這裡就傳入了兩個時間
為啥兩個時間呢?
-
一個為了優雅
DEFAULT_SHUTDOWN_QUIET_PERIOD
-
一個為了可控
DEFAULT_SHUTDOWN_TIMEOUT
從啟動狀态更改為終止态
然後在 NioEventLoop 的判斷關閉位置打斷點
- 有未完成的任務就執行,沒有就結束。
關閉服務的目的
關閉所有連接配接及Selector
- java.nio.channels.Selector#keys
-
- java.nio.channels.spi.AbstractlnterruptibleChannel#close
- java.nio.channels. SelectionKey#cancel
- selector.close()
關閉所有線程:退出循環體
for (;;)