Gin结合endless实现服务平滑重启

Gin结合endless实现服务平滑重启

      周末在家学习Go语言,并对之前自己封装的一套API项目进行优化编写,然后发现每次更新代码版本都需要杀掉进程,再重新输入守护进程命令,非常的麻烦,所以也网上查找了有关的资料,发现复制粘贴党也是一大堆,写得也看得不是很明白,要不就是根本无法用,于是经过尝试,最终发现配合endless,经过验证最终实现了,在这里跟大家分享。

      由于windows环境原因,是不支持下载endless,所以博主对endless包实在Mac环境下下载并编译成二进制文件打包到Centos环境运行,最终验证实现。

      一、下载第三方扩展

      输入以下命令

go get -u github.com/fvbock/endless

安装完之后,我们直接修改代码。

      二、引入使用

      我就直接在我之前的开源项目上直接改,代码如下:

package main

//引入模块
import (
   "goAPI/db"
   "goAPI/conf"
   "github.com/fvbock/endless"
   "log"
)

//定义主入口
func main() {
   //初始化配置
   projectConfig := conf.Config{}
   configData := projectConfig.ConfigGetValue()
   //获取端口号
   projectPort := configData.ProjectPort
   //定义防错机制,防止出现错误,消耗数据库链接
   defer db.SqlDB.Close()
   //定义路由
   router := initRouter()
   //监听端口
   err := endless.ListenAndServe(":"+projectPort,router)
   if err != nil {
      log.Println("err:",err)
   }
   //router.Run(":" + projectPort)
}

我们引入了endless扩展,将原本的Run方式启动项目改成了ListenAndServe方式。

      三、使用方式

      我们先将项目打包编译成的文件放到Linux上运行,然后输入守护进程

nohup ./goAPI&

运行之后,我们再修改项目,重新打包编译放到Linux上,这回我们输入以下命令

kill -1 PID

其中PID是项目运行的进程ID,可以通过以下命令查看

netstat -ntlp

执行效果如下图

WX20210724-171812@2x.png

这样我们就完成了平滑重启项目。

      这份代码是在我的开源项目基础上进行修改,大家可以访问基于Gin开发的API项目,如果不懂如何部署到Linux上,可以访问Gin编译部署到centos并搭配Nginx运行