优雅关闭web服务的方式

Posted 离地最远的星

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了优雅关闭web服务的方式相关的知识,希望对你有一定的参考价值。

优雅关闭web服务

DBHelper, err = gorm.Open("mysql", "root:root@(115.159.59.129:3306)/test?charset=utf8&parseTime=True&loc=Local")
    if err != nil {
        log.Fatal("数据库初始化错误", err) //log.Fatal输出日志并且退出主程序
        return
    }

优雅的关闭server

part 1初始化退出信号
package src

import (
    "context"
    "log"
    "os"
    "os/signal"
    "time"
)

var ServerSigChan chan os.Signal
var ctx context.Context

func init() {
    ServerSigChan = make(chan os.Signal)
    ctx, _ = context.WithTimeout(context.Background(), 10*time.Second)
    go ServerNotify(ctx)
}

func ServerNotify(ctx context.Context) {
    signal.Notify(ServerSigChan)
    select {
    case <-ServerSigChan:
        ServerSigChan <- os.Interrupt
    case <-ctx.Done(): //这里等待的时间可以用来在关闭连接的时候释放资源
        ServerSigChan <- os.Interrupt
    }
}

func ShutDownServer(err error) {
    log.Println(err)
    ServerSigChan <- os.Interrupt
    log.Println("数据库优雅退出")
    os.Exit(1)
}

part2 初始化数据库连接

package src

import (
    "github.com/jinzhu/gorm"
    "time"
)

var DBHelper *gorm.DB

var err error

func InitDB() {
    DBHelper, err = gorm.Open("mysql", "root:root@(115.159.59.129:3306)/test?charset=utf8&parseTime=True&loc=Local")
    if err != nil {
        ShutDownServer(err) //关闭连接
    }

    DBHelper.SingularTable(true)
    DBHelper.DB().SetMaxIdleConns(10)
    DBHelper.DB().SetMaxOpenConns(100)
    DBHelper.DB().SetConnMaxLifetime(time.Hour)
}

启动项目

func main(){
    router := gin.Default()
    go InitDB() //协程初始化数据库连接
    if v, ok := binding.Validator.Engine().(*validator.Validate); ok {
        v.RegisterValidation("topicurl", TopicUrl)
    }
    v1 := router.Group("/v2/mtopics")
    {
        v2.DELETE("/mtopics", DelMTopic)
    }
    router.Run()
}




以上是关于优雅关闭web服务的方式的主要内容,如果未能解决你的问题,请参考以下文章

积累如何优雅关闭SpringBoot Web服务进程

spring-boot 2 优雅关闭网络

Web 服务器正常关闭未按预期工作

tomcat使用stop.sh脚本无法关闭

如何优雅地关闭 ASP.Net(非核心)

在webapp中优雅地关闭ExecutorService?