谈 Golang http.Server 安全退出:容易被误用的 Shutdown()方法

2021-09-23 12:55:22 +08:00
 nanmu42

各位好。

Go HTTP server 安全退出是一个比较常见的需求,妥善使用可以降低发版时的服务抖动。

我在最近才发现两年多以来,我的实现一直有问题,原因是我没好好读文档┑( ̄Д  ̄)┍,另外Shutdown()这个方法的 API 设计略微有些毛刺,望文生义容易翻车。

我把我的经历写了下来,希望能抛砖引玉,欢迎各位交流拍砖。

谢谢。

3116 次点击
所在节点    Go 编程语言
25 条回复
nanmu42
2021-10-03 10:24:08 +08:00
@zoharSoul 谢谢夸奖。Hugo 和 Zzo 主题,稍微自己改了一点点。
lihanx9
2022-01-05 17:13:51 +08:00
https://gin-gonic.com/docs/examples/graceful-restart-or-stop/

是不是和 Gin 给的这个示例异曲同工?如果直接用 ctx.Done() 的 channel ,是不是就可以不用自己创建一个 s.shutdownFinished 这个 channel 了呢?😳
nanmu42
2022-01-10 13:13:18 +08:00
@lihanx9 啊,我怀疑 Gin 的这个例子是错的…
lihanx9
2022-01-14 11:31:04 +08:00
@nanmu42 好吧,那我再理解理解😂😂😂 谢谢
nanmu42
2022-01-15 12:50:02 +08:00
@lihanx9 Shutdown 这个 API 挺容易踩雷的,不过服务退出和重启并不经常发生,实际影响还是有限。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/803612

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX