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服務。歡迎關注goGrace