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()
// すべてのホストを閉じる。
app.Shutdown(ctx)
close(idleConnsClosed)
})
// [...]
app.Listen(":8080", iris.WithoutInterruptHandler, iris.WithoutServerError(iris.ErrServerClosed))
<-idleConnsClosed