網頁

2023/11/2

Golang Gin graceful shutdown範例

Gin graceful shutdown範例。


範例環境:

  • Go 1.19


範例

main.go

package main

import (
    "context"
    "fmt"
    "log"
    "net/http"
    "os/signal"
    "syscall"
    "time"

    "github.com/gin-gonic/gin"
)

func main() {
    ctx, stop := signal.NotifyContext(context.Background(), syscall.SIGINT, syscall.SIGTERM)
    defer stop()

    router := gin.Default()
    router.GET("/hello", func(c *gin.Context) {
        time.Sleep(time.Second * 10)
        fmt.Fprintf(c.Writer, "hello")
    })

    srv := &http.Server{
        Addr:    ":8080",
        Handler: router,
    }

    go func() {
        if err := srv.ListenAndServe(); err != nil && err != http.ErrServerClosed {
            log.Fatalf("listen: %s\n", err)
        }
    }()

    <-ctx.Done()

    stop()
    log.Println("shutting down gracefully, press Ctrl+C again to force")

    ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
    defer cancel()
    if err := srv.Shutdown(ctx); err != nil {
        log.Fatal("Server forced to shutdown: ", err)
    }

    log.Println("Server exiting")
}

github



沒有留言:

張貼留言