当前位置:网站首页>golang-gin-优雅重启
golang-gin-优雅重启
2022-07-31 13:01:00 【SakuraKizuna】
当gin框架部署以及运行的时候,如果瞬间重启或关闭,可能会造成其中的进程或者函数执行不完整,形成脏数据,导致系统个别功能运行异常。因此优雅的重启以及关闭是非常有必要的
原理:关闭http server后延迟几秒关闭系统,待各个函数运行完毕
此为https的请求,调用ListenAndServeTLS
并且加入证书位置来开启tls。
如果为http则只需改为ListenAndServe
即可
代码设置在main.go函数
//开启的端口号
//err = r.RunTLS(config.TLSConfig.Addr, config.TLSConfig.CertFile, config.TLSConfig.KeyFile)
//if err != nil {
// panic(err)
//}
srv := &http.Server{
Addr: config.TLSConfig.Addr,
Handler: r,
}
go func() {
// 基于https的服务连接开启
if err := srv.ListenAndServeTLS(config.TLSConfig.CertFile, config.TLSConfig.KeyFile) ; err != nil && err != http.ErrServerClosed {
log.Fatalf("listen: %s\n", err)
}
}()
// Wait for interrupt signal to gracefully shutdown the server with
// a timeout of 3 seconds.
quit := make(chan os.Signal)
// kill (no param) default send syscanll.SIGTERM
// kill -2 is syscall.SIGINT
// kill -9 is syscall. SIGKILL but can"t be catch, so don't need add it
signal.Notify(quit, syscall.SIGINT, syscall.SIGTERM)
<-quit
log.Println(time.Now().Format("2006-01-02 15:04:05")+"Shutdown Server ...")
ctx, cancel := context.WithTimeout(context.Background(), 3*time.Second)
defer cancel()
if err := srv.Shutdown(ctx); err != nil {
log.Fatal("Server Shutdown:", err)
}
// catching ctx.Done(). timeout of 3 seconds.
select {
case <-ctx.Done():
log.Println("timeout of 3 seconds.")
}
log.Println(time.Now().Format("2006-01-02 15:04:05")+" Server Done")
fmt.Println(time.Now().Format("2006-01-02 15:04:05")+" Server Done")
运行结果:
边栏推荐
- ADS与C#通信
- C#获得网卡信息 NetworkInterface IPInterfaceProperties
- The function of SQL GROUP BY dependence
- Hybrid brain-computer interface system based on steady-state visual evoked potentials and attentional EEG
- 0X7FFFFFFF,0X80000000「建议收藏」
- 基于verilog的CRC校验(汇总)
- 跨境电商小知识之跨境电商物流定义以及方式讲解
- 电脑重要文件很多,如何备份比较安全?
- C# List用法 List介绍
- SAP ABAP OData 服务如何支持 $filter (过滤)操作试读版
猜你喜欢
函数的参数
PyQt5 rapid development and actual combat 10.1 Get city weather forecast
The 2nd activity of the TOGAF10 Standard Reading Club continues wonderfully, and the highlights will be reviewed!
跨境电商小知识之跨境电商物流定义以及方式讲解
ADS与C#通信
[CPU Design Practice] Simple Pipeline CPU Design
Introduction to using NPM
报错:npm ERR code EPERM
深入浅出边缘云 | 4. 生命周期管理
函数递归1.0
随机推荐
Istio微服务治理网格的全方面可视化监控(微服务架构展示、资源监控、流量监控、链路监控)
docker部署完mysql无法连接
CentOS7 installation MySQL graphic detailed tutorial
LRU缓存[线性表 -> 链表 -> hash定位 -> 双向链表]
Markdown编辑器语法
一文吃透哈希表
C#使用NumericUpDown控件
PyQt5快速开发与实战 9.7 UI层的自动化测试
vivado里那些看不懂的原语
SAP message TK 248 solved
IDEA版Postman插件Restful Fast Request,细节到位,功能好用
365天挑战LeetCode1000题——Day 044 最大层内元素和 层次遍历
C#Assembly的使用
ECCV2022:在Transformer上进行递归,不增参数,计算量还少!
纷享销客罗旭对话元气森林黄晓枫:零售数字化的终点不是创新,而是数据
The function of SQL GROUP BY dependence
IDEA如何运行web程序
Adding data nodes and decommissioning data nodes in the cluster
小试牛刀—猜数字游戏
函数的参数