天天看點

Netty如何實作服務的優雅關閉1 優雅關閉的常見作用2 Netty 優雅關閉流程圖為啥兩個時間呢?

1 優雅關閉的常見作用

最常見的,比如業務開發中,服務突然異常,剛進來的使用者請求還在,通過優雅關閉,給他們 30s 時間繼續執行,以免直接報錯出去。

2 Netty 優雅關閉流程圖

Netty如何實作服務的優雅關閉1 優雅關閉的常見作用2 Netty 優雅關閉流程圖為啥兩個時間呢?
  • 修改 NioEventLoop 的 State 标志位
  • NioEventLoop 判斷 State 執行退出

先不接活,後盡量幹完手頭的活(先關 boss 後關 worker:非百分百保證)

Netty如何實作服務的優雅關閉1 優雅關閉的常見作用2 Netty 優雅關閉流程圖為啥兩個時間呢?

打斷點,主要看 workGroup 的關閉

  • 這裡就傳入了兩個時間
Netty如何實作服務的優雅關閉1 優雅關閉的常見作用2 Netty 優雅關閉流程圖為啥兩個時間呢?

為啥兩個時間呢?

  • 一個為了優雅

    DEFAULT_SHUTDOWN_QUIET_PERIOD

  • 一個為了可控

    DEFAULT_SHUTDOWN_TIMEOUT

從啟動狀态更改為終止态

Netty如何實作服務的優雅關閉1 優雅關閉的常見作用2 Netty 優雅關閉流程圖為啥兩個時間呢?

然後在 NioEventLoop 的判斷關閉位置打斷點

  • Netty如何實作服務的優雅關閉1 優雅關閉的常見作用2 Netty 優雅關閉流程圖為啥兩個時間呢?
  • 有未完成的任務就執行,沒有就結束。
Netty如何實作服務的優雅關閉1 優雅關閉的常見作用2 Netty 優雅關閉流程圖為啥兩個時間呢?

關閉服務的目的

關閉所有連接配接及Selector

  • java.nio.channels.Selector#keys
    • java.nio.channels.spi.AbstractlnterruptibleChannel#close
    • java.nio.channels. SelectionKey#cancel
  • selector.close()
Netty如何實作服務的優雅關閉1 優雅關閉的常見作用2 Netty 優雅關閉流程圖為啥兩個時間呢?

關閉所有線程:退出循環體

for (;;)

繼續閱讀