当前位置 : 主页 > 编程语言 > java >

HTTP服务平滑重启

来源:互联网 收集:自由互联 发布时间:2022-06-23
Golang是一种与C语言类似的编译型语言,这意味着如果我们修改了代码就需要重新编译部署,但在很多大型系统中停止服务就意味着损失大笔的收入,破坏完美的用户体验。goGrace就是为

Golang是一种与C语言类似的编译型语言,这意味着如果我们修改了代码就需要重新编译部署,但在很多大型系统中停止服务就意味着损失大笔的收入,破坏完美的用户体验。goGrace就是为解决这个问题而开发的。

我们通常会这样实现一个Golang的HTTP服务

package main

import (
“fmt”
“log”
“net/http”
“os”
“strconv”
)

func main() {

http.HandleFunc("/", func(w http.ResponseWriter, req *http.Request) {
fmt.Fprintf(w, “Welcome to the home page!”+strconv.Itoa(os.Getpid()))
})

err := http.ListenAndServe(":6086", nil)
if err != nil {
log.Println(err)
}
}

goGrace提供了非常简单的方式使您的HTTP服务几乎不需要修改就能支持平滑重启,您需要做的只有如下三步:
Step1:
在命令行执行goGrace安装命令

# go get github.com/pantsing/gograce

package main

import (
“fmt”
“log”
“net/http”
“strconv”

“​​github.com/pantsing/gograce/ghttp​​​” // Step2: 导入goGrace的Pacekage
)

func main() {
http.HandleFunc("/", func(w http.ResponseWriter, req *http.Request) {
fmt.Fprintf(w, “Welcome to the home page!”+strconv.Itoa(os.Getpid()))
})

// Step3: 是的,将http改为ghttp
err := ghttp.ListenAndServe(":6086", nil)
if err != nil {
log.Println(err)
}
}

It’s so easy, right?! 你现在就可以通过向服务进程发送SIGHUP信号平滑重启服务了,或者发送SIGQUIT信号平滑退出。当收到退出信号后默认的等待请求执行完毕关闭connection退出的时间是60秒,您可以在服务启动前通过ghttp.SetListenerCloseTimeout(second int64)函数设置等待时间。或者如果您实例化了GraceServer对象,也可以直接设置其ListenerCloseTimeout属性。

目前goGrace只支持HTTP服务,之后还将会扩展到TCP服务。


上一篇:Micro
下一篇:没有了
网友评论