GRPC: 如何优雅关闭进程(graceful shutdown)

数字探秘者
• 阅读 2358

简介: 本文将介绍优雅关闭 gRPC 微服务。在进程收到关闭信号时,我们需要关闭后台运行的逻辑,比如,MySQL 连接等等。

介绍

本文将介绍优雅关闭 gRPC 微服务。

什么是优雅关闭?

在进程收到关闭信号时,我们需要关闭后台运行的逻辑,比如,MySQL 连接等等。

我们将会使用 rk-boot 来启动 gRPC 服务。

请访问如下地址获取完整教程:

安装

go get github.com/rookie-ninja/rk-boot

快速开始

1.创建 boot.yaml

---
grpc:
  - name: greeter                   # Name of grpc entry
    port: 8080                      # Port of grpc entry
    enabled: true                   # Enable grpc entry

2.创建 main.go

通过 AddShutdownHookFunc() 来添加 shutdownhook 函数。

package main

import (
    "context"
    "github.com/rookie-ninja/rk-boot"
    "github.com/rookie-ninja/rk-gin/interceptor/context"
)

// Application entrance.
func main() {
    // Create a new boot instance.
    boot := rkboot.NewBoot()
    
    // Add shutdown hook function
    boot.AddShutdownHookFunc("shutdown-hook", func() {
        fmt.Println("shutting down")
    })

    // Bootstrap
    boot.Bootstrap(context.Background())

    // Wait for shutdown sig
    boot.WaitForShutdownSig(context.Background())
}

3.启动 main.go

$ go run main.go

4.ctrl-c

通过 ctrl-c 关闭程序,我们会看到打印如下信息。

shutting down

原文链接
本文为阿里云原创内容,未经允许不得转载。

点赞
收藏
评论区
推荐文章
Easter79 Easter79
3年前
springboot项目在docker容器中如何优雅关闭
前言什么是优雅关闭在我看来所谓的优雅关闭,就是在系统关闭时,预留一些时间,让你有机会来善后一些事情什么时候需要优雅关闭是否所有项目都需要优雅关闭?那也不一定,毕竟所谓的优雅关闭,另一面就意味这关闭得慢,因此项目的优雅关闭得看项目的核心程度,换言之就是看该项目处理的数据是不是核心数据,其实项目的最终本质,是对数据的处理。
CuterCorley CuterCorley
4年前
Linux使用 常见经验和技巧总结
1.XShell连接远程Linux服务器并运行程序后关闭XShell继续执行XShell是用来连接远程Linux很好的工具,在连接之后并运行好需要运行的程序后,往往需要关闭XShell,但是直接运行比如运行pythoncrawler.py运行一个Python爬虫程序后,并直接关闭XShell往往会同时杀掉正在运行的爬虫程序,因此需要使用sudo
韩斌 韩斌
4年前
优雅关闭Spring Boot应用
最新的SpringBoot添加了一个新特性优雅停机。官方介绍官方文档地址:https://docs.spring.io/springboot/docs/current/reference/htmlsingle/bootfeaturesgracefulshutdown这个机制会有一个超时时间,该超时时间提供一个宽限期,在此宽限期内,现有请求将被允
红烧土豆泥 红烧土豆泥
3年前
关于如何优雅的关闭JVM
关于如何优雅的关闭JVM使用的类及其方法:Runtime.addShutdownloadHook(Threadhook)虚拟机关闭以及响应两种事件:程序正常退出:最后一个守护线程退出或者调用exit(相当于System,exit)方法时虚拟机响应用户中断:(键入^C)或者系统范围内的事件(用户注销或者系统关闭)而终止language/
Stella981 Stella981
3年前
Linux后台运行进程 node screen
1\.后台运行的例子nohupcommand/dev/null2&1&解释:nohup:nohangup,不挂断地运行命令。只用nohup命令,关闭终端,进程还存在。若在终端中直接使用Ctrlc,则会关闭进程。command:command是用户输入的命
Stella981 Stella981
3年前
Linux学习20
前言django在linux上运行,一般在xshell远程连接后,是通过pythonmanage.pyrunserver0.0.0.0:8000启动服务。但是这样有个弊端,窗口关闭服务就停止了。nohup可以启动的时候挂后台运行nohup后台运行cd到django的manage.py目录,启动之前先杀掉进程
Stella981 Stella981
3年前
Linux 进程后台运行的方法
当用户注销(logout)或者网络断开时,终端会收到HUP(hangup)信号从而关闭其所有子进程。因此,我们的解决办法就有两种途径:要么让进程忽略HUP信号,要么让进程运行在新的会话里从而成为不属于此终端的子进程。nohupnohup的用途就是让提交的命令忽略hangup信号。nohup的使用是十分方便的,只需在要处理
Wesley13 Wesley13
3年前
Java ExcutorService优雅关闭方式
关闭时可使用如下代码publicstaticvoidwaitUntilTerminate(finalExecutorServiceexecutorService,finalinttimeout){try{executorService.shutdown();
Easter79 Easter79
3年前
Tomcat 优雅关闭之路
本文首发于vivo互联网技术微信公众号 链接:https://mp.weixin.qq.com/s/ZqkmoAR4JEYr0x0Suoq7QQ(https://www.oschina.net/action/GoToLink?urlhttps%3A%2F%2Fmp.weixin.qq.com%2Fs%2FZqkmoAR4JEYr0x0
九路 九路
1年前
linux nohup命令使用教程
nohup的作用可以将程序以忽略挂起信号(SIGHUP)的方式运行。常见的用法是和&命令一同使用,将命令放置到后台运行,即使终端挂掉,进程会忽略挂起信号,继续运行。平时我们直接执行命令,只是在终端中运行,如果关闭了终端,我们的命令也就结束了。尤其是服务,需
位流程风 位流程风
1星期前
Linux 重启命令全解析:深入理解与应用指南
在Linux系统中,掌握正确的重启命令是确保系统稳定运行和进行必要维护的关键技能。本文将深入解析Linux中常见的重启命令,包括功能、用法、适用场景及注意事项。一、reboot命令功能简介reboot是最常用的重启命令之一。它以优雅的方式关闭所有运行的进程
数字探秘者
数字探秘者
Lv1
在天愿作比翼鸟,在地愿为连理枝。
文章
2
粉丝
0
获赞
0