我還是Google Cloud Appengine(標準版)中的golang初學者。 我想使用一個自動調用實例關閉的函數。 啓動過程中調用了一個init函數。 現在我正在尋找像破壞功能那樣的相反部分。 似乎有這樣的蟒蛇,但無法找到 golang的任何東西。初始化和破壞功能
你怎麼能在谷歌appengine實例中實現這樣的破壞功能?
我還是Google Cloud Appengine(標準版)中的golang初學者。 我想使用一個自動調用實例關閉的函數。 啓動過程中調用了一個init函數。 現在我正在尋找像破壞功能那樣的相反部分。 似乎有這樣的蟒蛇,但無法找到 golang的任何東西。初始化和破壞功能
你怎麼能在谷歌appengine實例中實現這樣的破壞功能?
這記錄在Go - How Instances are Managed。
不幸的是,轉到文檔是不完整的,這裏是Pyton版本的鏈接:Python - How Instances are Managed。它實施/支持的方式是語言不可知的。
當一個實例啓動時,HTTP GET請求被髮送到/_ah/start
路徑。
在取消實例之前,將HTTP GET請求發送到/_ah/stop
路徑。
您應該使用package init()
functions作爲始終運行的初始化目的,並且只能使用一次。如果您的初始化函數需要請求,那麼請在_/ah/start
路徑中註冊一個處理程序。
而且你可以註冊一個處理程序,/_ah/stop
和實施這樣的 「關機」 功能:
func init() {
http.HandleFunc("/_ah/stop", shutdownHandler)
}
func shutdownHandler(w http.ResponseWriter, r *http.Request) {
doSomeWork()
saveState()
}
但是你不能依靠這個100%:
注:這是重要的是要認識到,在實例終止之前,關閉鉤子並不總是能夠運行。在極少數情況下,可能會發生停機,導致App Engine無法提供30秒的關機時間。因此,我們建議定期檢查實例的狀態,並將其主要用作內存中緩存而不是可靠的數據存儲。