拍卖网站开发,泉州seo网站建设费用,大连搜索排名提升,子轩wordpress文章目录 优雅关机优雅重启 无论是优雅关机还是优雅重启归根结底都是通过监听特定系统信号#xff0c;然后执行一定的逻辑处理保障当前系统正在处理的请求被正常处理后再关闭当前进程。
优雅关机
优雅关机就是服务端关机命令发出后不是立即关机#xff0c;而是等待当前还在… 文章目录 优雅关机优雅重启 无论是优雅关机还是优雅重启归根结底都是通过监听特定系统信号然后执行一定的逻辑处理保障当前系统正在处理的请求被正常处理后再关闭当前进程。
优雅关机
优雅关机就是服务端关机命令发出后不是立即关机而是等待当前还在处理的请求全部处理完毕后再退出程序是一种对客户端友好的关机方式。注如果是执行CtrlC关闭服务端时仍会强制结束进程导致正在访问的请求出现问题。
Gin是不带优雅关机功能的但Go 1.8版本之后 http.Server 内置的 Shutdown() 方法就支持优雅地关机所以可以先将Gin的路由封装为一个http.Server。说明一下Shutdown工作的机制当程序检测到中断信号时我们调用http.server中的shutdown方法该方法将阻止新的请求进来同时保持当前的连接直到当前连接完成才终止程序
package mainimport (contextlognet/httposos/signalsyscalltimegithub.com/gin-gonic/gin
)func main() {// 创建 Gin 实例router : gin.Default()// 添加路由router.GET(/, func(c *gin.Context) {c.String(http.StatusOK, Hello, World! weiyigeek.top)})// 创建 HTTP Serversrv : http.Server{Addr: :8080,Handler: router,}// 开启一个goroutine启动服务 启动 HTTP Servergo func() {if err : srv.ListenAndServe(); err ! nil err ! http.ErrServerClosed {log.Fatalf(listen: %s\n, err)}}()// 等待中断信号quit : make(chan os.Signal)// kill 默认会发送 syscall.SIGTERM 信号// kill -2 发送 syscall.SIGINT 信号我们常用的CtrlC就是触发系统SIGINT信号// kill -9 发送 syscall.SIGKILL 信号但是不能被捕获所以不需要添加它// signal.Notify把收到的 syscall.SIGINT或syscall.SIGTERM 信号转发给quitsignal.Notify(quit, syscall.SIGINT, syscall.SIGTERM) // 此处不会阻塞-quit // 阻塞在此当接收到上述两种信号时才会往下执行log.Println(Shutdown Server ...)// 创建一个 5 秒的超时上下文ctx, cancel : context.WithTimeout(context.Background(), 5*time.Second)defer cancel()// 关闭 HTTP Server// // 5秒内优雅关闭服务将未处理完的请求处理完再关闭服务超过5秒就超时退出if err : srv.Shutdown(ctx); err ! nil {log.Fatal(Server Shutdown:, err)}log.Println(Server exiting)
}首先创建了一个Gin实例和一个HTTP Server然后启动HTTP Server。接下来使用signal.Notify()函数监听中断信号SIGINT和SIGTERM,当接收到中断信号时服务器会进入优雅关闭流程即先关闭HTTP Server然后等待5秒钟最后退出程序。
在关闭HTTP Server时我们使用了srv.Shutdown()函数它会优雅地关闭HTTP Server并等待所有连接关闭。如果在5秒钟内没有关闭完所有连接函数会返回错误。
优雅重启
可参考https://mp.weixin.qq.com/s?__bizMzU5MjAxMDc1Ngmid2247483846idx1sn25b7441dd72dc0e63afbf93694e9eb54chksmfe270aadc95083bbe2923fe745d8f9d36b135a40ef9af74dfe2afa368702c986b5dea12b7f88scene178cur_album_id1338144742571458563#rd