Il framework Iris supporta la chiusura delicata. Nei scenari aziendali reali, quando vogliamo riavviare o chiudere l'applicazione web, forzare direttamente il processo Go a chiudersi può facilmente portare alla terminazione incompleta di alcuni processi aziendali, causando eccezioni aziendali. Il modo migliore è smettere di accettare nuove richieste, lasciare che le richieste in corso finiscano il processo di elaborazione e quindi uscire dal processo Go.
Puoi utilizzare diversi metodi per eseguire la chiusura o il riavvio delicati. Puoi anche utilizzare pacchetti di terze parti appositamente creati per questo scopo, oppure puoi utilizzare il metodo app.Shutdown(context.Context).
Registrare l'evento CTRL/CMD+C utilizzando iris.RegisterOnInterrupt:
idleConnsClosed := make(chan struct{})
iris.RegisterOnInterrupt(func() {
timeout := 10 * time.Second
ctx, cancel := stdContext.WithTimeout(stdContext.Background(), timeout)
defer cancel()
// chiudere tutti gli host.
app.Shutdown(ctx)
close(idleConnsClosed)
})
// [...]
app.Listen(":8080", iris.WithoutInterruptHandler, iris.WithoutServerError(iris.ErrServerClosed))
<-idleConnsClosed