Go HTTP 服务收到 SIGTERM 后,不应该立即退出。正确做法是停止接收新请求,给已有请求一段时间完成,再关闭数据库连接等资源。

ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
defer cancel()
_ = srv.Shutdown(ctx)

超时时间要根据接口最长耗时设置,不要无限等待。后台任务也要监听 ctx,否则主服务退出了,任务还在写一半数据。

优雅关闭的目标是发布和重启时少丢请求、少产生半成品状态。它不是框架特性,而是服务生命周期的一部分。

分类: Go 语言笔记 标签: Go 超时控制 部署

评论

-- 评论已关闭 --

全部评论