2017-10-11 90 views
1

我還是Google Cloud Appengine(標準版)中的golang初學者。 我想使用一個自動調用實例關閉的函數。 啓動過程中調用了一個init函數。 現在我正在尋找像破壞功能那樣的相反部分。 似乎有這樣的蟒蛇,但無法找到 golang的任何東西。初始化和破壞功能

你怎麼能在谷歌appengine實例中實現這樣的破壞功能?

回答

2

這記錄在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秒的關機時間。因此,我們建議定期檢查實例的狀態,並將其主要用作內存中緩存而不是可靠的數據存儲。