優雅停機
讓 Dubbo 服務完成優雅關閉
功能說明
優雅關閉是指服務執行個體可以安全平穩地停止,而不會影響正在進行的業務。Dubbo 服務可能同時是服務提供者和服務消費者。當服務停止時
- 消費者將不再請求已停止的服務執行個體
- 服務執行個體正在處理的請求可以正常處理
使用場景
- 使用
kill PID
停止服務 - 通過 SpringBoot Actuator 的
/shutdown
停止服務
Dubbo 3.0 及以上版本支援不同類型的 Java 應用程式,包括 SpringBoot 應用程式、Spring 應用程式和非 Spring 應用程式。
使用方法
設定優雅關閉逾時時間,預設逾時時間為 10 秒,如果逾時,將強制關閉。此參數可以在 dubbo.properties 檔案中配置,例如:30 秒。
# Stop service waiting time, unit: milliseconds
dubbo.service.shutdown.wait=30000
注意事項
Dubbo 使用 JDK 的 ShutdownHook 來完成優雅關閉,因此如果使用者使用
kill -9 PID
等強制關閉命令,則不會執行優雅關閉,只有在傳遞kill PID
時才會執行。驗證 Dubbo 的 ShutdownHook 是否執行。您可以在日誌檔案中找到關鍵字:
Run shutdown hook now.
如果使用 Spring,請升級到 4.2 及以上版本,建議使用 5 或以上版本
如果使用 SpringBoot,Dubbo 的 ShutdownHook 將在 SpringBoot 的 ShutdownHook 之前執行, 如果您使用 SpringBoot 2.3 及以上版本,建議與 SpringBoot 的優雅關閉一起使用,並在配置檔案 application.yml 中進行配置
server:
shutdown: graceful
- 如果 ShutdownHook 不生效,可以根據具體場景自行呼叫
ApplicationModel.defaultModel().destroy();
上次修改時間:2023 年 1 月 2 日:增強英文文件 (#1798) (95a9f4f6c1c)