2017-10-11 86 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秒的关机时间。因此,我们建议定期检查实例的状态,并将其主要用作内存中缓存而不是可靠的数据存储。