Beego开启热升级

1、打开配置

beego.BConfig.Listen.Graceful = true

2、写入pid

程序入口main()函数里写入pid

func writePid() {
    fileName := "./test_server.pid"
    file, _ := os.OpenFile(fileName, os.O_RDWR|os.O_CREATE, 0666)
    defer file.Close()

    writer := bufio.NewWriter(file)

    pid := strconv.Itoa(os.Getpid())
    writer.Write([]byte(pid))
    writer.Flush()
}

3、测试热升级

1、编写代码,在beego应用的controller中Get方法实现大概如下:

func (this *MainController) Get() {
    a, _ := this.GetInt("sleep")
    time.Sleep(time.Duration(a) * time.Second)
    this.Ctx.WriteString("ospid:" + strconv.Itoa(os.Getpid()))
}

2、打开两个终端
一个终端输入:ps -ef | grep 应用名
一个终端输入请求:curl "http://127.0.0.1:8080/?sleep=20"

3、热升级
kill -HUP 进程ID

4、打开一个终端输入请求:curl "http://127.0.0.1:8080/?sleep=0"

我们可以看到这样的结果,第一个请求等待20s,但是处理他的是老的进程,热升级之后,第一个请求还在执行,最后会输出老的进程ID,而第二次请求,输出的是新的进程ID

原文地址:https://www.cnblogs.com/ExMan/p/11527355.html