Framework Iris obsługuje łagodne zamykanie. W rzeczywistych scenariuszach biznesowych, gdy chcemy zrestartować lub zamknąć aplikację internetową, bezpośrednie zmuszenie procesu Go do zakończenia może łatwo prowadzić do przerwania niezakończonych procesów biznesowych, wywołując wyjątki biznesowe. Lepszym podejściem jest zaprzestanie akceptowania nowych żądań, pozwalając na zakończenie przetwarzania trwających żądań, a następnie zakończenie procesu Go.
Można użyć kilku metod, aby wykonać łagodne zatrzymanie lub restart. Można również użyć pakietów stron trzecich specjalnie zbudowanych do tego celu, lub można użyć metody app.Shutdown(context.Context).
Zarejestruj zdarzenie CTRL/CMD+C, używając iris.RegisterOnInterrupt:
idleConnsClosed := make(chan struct{})
iris.RegisterOnInterrupt(func() {
timeout := 10 * time.Second
ctx, cancel := stdContext.WithTimeout(stdContext.Background(), timeout)
defer cancel()
// zamknij wszystkie hosty.
app.Shutdown(ctx)
close(idleConnsClosed)
})
// [...]
app.Listen(":8080", iris.WithoutInterruptHandler, iris.WithoutServerError(iris.ErrServerClosed))
<-idleConnsClosed