[英]Graceful shutdowns on Cloud Run
我指的是這篇文章: Graceful Shutdowns on Cloud Run
該示例概述了如何在 Node.js 中執行此操作。
在 Golang 中如何做到這一點? 簡單地將其添加到func init()
方法有什么問題嗎?
func shutdownGracefully() {
c := make(chan os.Signal)
signal.Notify(c, os.Interrupt, syscall.SIGTERM)
go func() {
<-c
// Do some cleanup stuff here...
os.Exit(0)
}()
}
我們在https://github.com/GoogleCloudPlatform/golang-samples/pull/1902有用於正確信號處理的示例 Go 代碼。 它尚未合並,但主要強調如何在 Go 上正確執行此操作。
請注意,在本地運行時,向您的應用程序發送 Ctrl+C 是一個 SIGINT,但在 Cloud Run 上您將獲得 SIGTERM。 在不丟棄正在進行的請求的同時正確傳遞取消和優雅地處理服務器關閉也很重要(不過, net/http.Server
會為您處理其中相當一部分,正如您將在示例代碼中看到的那樣)。
在 Golang 中如何做到這一點?
在 go 中處理正常關閉的慣用方法是使用select
語句阻止主 goroutine 偵聽任何信號。 從那里您可以在必要時觸發所有正確的關閉。
例如:
select {
case err := <-anyOtherError:
// ...
case signal := <- c:
// Handle shutdown e.g. like http Server Shutdown
}
我喜歡將它設置在run
function 中,並執行其他啟動任務,例如啟動服務器、配置等。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.