Le framework Iris prend en charge l'arrêt en douceur. Dans des scénarios commerciaux réels, lorsque nous voulons redémarrer ou fermer l'application web, forcer directement le processus Go à s'arrêter peut facilement entraîner l'interruption de certains processus métier en cours sans achèvement, provoquant des exceptions métier. La meilleure approche consiste à cesser d'accepter de nouvelles demandes, à laisser les demandes en cours terminer le traitement, puis à quitter le processus Go.
Vous pouvez utiliser plusieurs méthodes pour effectuer un arrêt ou un redémarrage en douceur. Vous pouvez également utiliser des packages tiers spécifiquement conçus à cet effet, ou vous pouvez utiliser la méthode app.Shutdown(context.Context).
Enregistrez l'événement CTRL/CMD+C en utilisant iris.RegisterOnInterrupt :
idleConnsClosed := make(chan struct{})
iris.RegisterOnInterrupt(func() {
timeout := 10 * time.Second
ctx, cancel := stdContext.WithTimeout(stdContext.Background(), timeout)
defer cancel()
// fermer tous les hôtes.
app.Shutdown(ctx)
close(idleConnsClosed)
})
// [...]
app.Listen(":8080", iris.WithoutInterruptHandler, iris.WithoutServerError(iris.ErrServerClosed))
<-idleConnsClosed