2 回答
TA贡献1856条经验 获得超5个赞
文档不是特别清楚,但是有一个接口可用于任何Fx模块,该接口具有请求正常关闭应用程序的方法。ShutdownerShutdown
下面是示例包的修改部分,它将在收到请求时将其简单地关闭:
func NewHandler(logger *log.Logger, shutdowner fx.Shutdowner) (http.Handler, error) {
logger.Print("Executing NewHandler.")
return http.HandlerFunc(func(http.ResponseWriter, *http.Request) {
logger.Print("Got a request. Requesting shutdown now that I've gotten one request.")
shutdowner.Shutdown()
}), nil
}
编辑:以下是修改解决方案的方法:
func register(shutdowner fx.Shutdowner) {
time.Sleep(5*time.Seconds)
shutdowner.Shutdown()
}
TA贡献1788条经验 获得超4个赞
您可以将其包装在 go 例程中,并使用上下文优雅地退出。
import (
"context"
"log"
" go.uber.org/fx"
)
func main() {
f := fx.New(fx.Invoke(register))
go func() {
f.Run()
}()
stopCh := make(chan os.Signal)
signal.Notify(stopCh, syscall.SIGINT, syscall.SIGTERM)
<-stopCh
if err := f.Stop(context.Background()); err != nil {
log.Printf("error stopping gracefully")
}
}
func register() {
time.Sleep(5*time.Seconds)
// shutdown somehow
}
- 2 回答
- 0 关注
- 165 浏览
添加回答
举报
