来源:未知 时间:2019-12-10 21:31 作者:小飞侠 阅读:次
[导读] 很多时候对于服务升级的做法简单粗暴, 就简单的杀进程启动新的进程. 还有的好一点就是多个相同的服务依次升级, 保证有服务可用. 但是公平的说这两种都会丢失请求中的连接. 鉴于这...
很多时候对于服务升级的做法简单粗暴, 就简单的杀进程启动新的进程. 还有的好一点就是多个相同的服务依次升级, 保证有服务可用. 但是公平的说这两种都会丢失请求中的连接. 鉴于这种情况, 在现实中我们可以使用优雅重启来搞定这个问题. Golang 实现优雅重启的原理也很简单:
对于上面的原理看似简单, 其实是分成了两个大的要点:
我们搞定了上面的原理之后, 加上 Go 1.8 的完美等待旧请求的实现, 我实现了一个简单的优雅重启库: https://github.com/douglarek/zerodown. zerodown 完美兼容基于 Go 标准库 Server 监听服务. 对于标准库的使用, 我们可以象下面一样使用: package main import ( "fmt" "log" "net/http" "time" "github.com/douglarek/zerodown" ) func main() { http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { time.Sleep(5 * time.Second) fmt.Fprintln(w, "Hello, World!") }) log.Fatalln(zerodown.ListenAndServe(":8080", nil)) 对于第三方库 Gin 我们可以: package main import ( "log" "net/http" "time" "github.com/douglarek/zerodown" "github.com/gin-gonic/gin" ) func main() { router := gin.Default() router.GET("/", func(c *gin.Context) { time.Sleep(5 * time.Second) c.String(http.StatusOK, "Hello, World!") }) log.Fatalln(zerodown.ListenAndServe(":8080", router)) } |
自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习
京ICP备14009008号-1@版权所有www.zixuephp.com
网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com