优雅关闭:SIGTERM 到底要做什么
Go HTTP 服务收到 SIGTERM 后,不应该立即退出。正确做法是停止接收新请求,给已有请求一段时间完成,再关闭数据库连接等资源。
ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
defer cancel()
_ = srv.Shutdown(ctx)超时时间要根据接口最长耗时设置,不要无限等待。后台任务也要监听 ctx,否则主服务退出了,任务还在写一半数据。
优雅关闭的目标是发布和重启时少丢请求、少产生半成品状态。它不是框架特性,而是服务生命周期的一部分。
版权申明
本文系作者 @blogger 原创发布在优雅关闭:SIGTERM 到底要做什么。未经许可,禁止转载。
评论
-- 评论已关闭 --
全部评论