一架梯子,一头程序猿,仰望星空!
Iris Web框架教程 > 内容正文

Go Iris优雅关机&重启


Go iris框架支持优雅退出,实际业务场景我们想重启/关闭web应用的时候,如果直接强制关闭Go进程,很容易出现有些业务处理一半,没有处理完成就被干掉,导致业务异常,比较好的做法的是先不接收新的请求,让正在处理请求,处理完成,然后再退出Go进程。

你可以使用几种方法来执行优雅关机或重启。也可以使用专门为此构建的第三方软件包,也可以使用 app.Shutdown(context.Context) 方法。

使用 iris.RegisterOnInterrupt 注册 CTRL/CMD+C 事件:

idleConnsClosed := make(chan struct{})
iris.RegisterOnInterrupt(func() {
    timeout := 10 * time.Second
    ctx, cancel := stdContext.WithTimeout(stdContext.Background(), timeout)
    defer cancel()
    // close all hosts.
    app.Shutdown(ctx)
    close(idleConnsClosed)
})

// [...]
app.Listen(":8080", iris.WithoutInterruptHandler, iris.WithoutServerError(iris.ErrServerClosed))
<-idleConnsClosed