本文介绍Go如何实现并应用函数实例生命周期回调方法。
使用说明
当您实现并配置函数实例生命周期回调后,函数计算将在相关实例生命周期事件发生时调用对应的回调程序。
- Initializer回调
Initializer回调在函数实例启动成功后,请求处理程序(Handler)之前执行。 - PreStop回调
PreStop回调在函数实例销毁前执行。使用PreStop回调需要继承com.ctg.faas.runtime.PreStopHandler接口,并实现该接口的preStop方法。
Initializer回调和PreStop回调的方法签名一样,入参只有一个context参数,提供在调用时的运行上下文信息。cf-runtime-go-sdk官方库提供了RegisterInitializerFunction、RegisterPreStopFunction方法分别用于注册Initializer回调和PreStop回调。
示例代码如下:
package main
import (
"context"
"gitee.com/ctyunfaas/cf-runtime-go-sdk/cf"
"gitee.com/ctyunfaas/cf-runtime-go-sdk/fccontext"
)
func initialize(ctx context.Context) {
fctx, _ := fccontext.FromContext(ctx)
fctx.GetLogger().Info("initialize...")
}
func preStop(ctx context.Context) {
fctx, _ := fccontext.FromContext(ctx)
fctx.GetLogger().Info("preStop...")
}
func HandleRequest(ctx context.Context) (string, error) {
fctx, _ := fccontext.FromContext(ctx)
fctx.GetLogger().Info("HandleRequest...")
return "hello world", nil
}
func main() {
cf.RegisterPreStopFunction(preStop)
cf.RegisterInitializerFunction(initialize)
cf.Start(HandleRequest)
}