| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 网络协议 -> 【mq】从零开始实现 mq-05-实现优雅停机 -> 正文阅读 |
|
[网络协议]【mq】从零开始实现 mq-05-实现优雅停机 |
前景回顾【mq】从零开始实现 mq-02-如何实现生产者调用消费者? 【mq】从零开始实现 mq-03-引入 broker 中间人 为什么需要优雅关闭?我记得多年前,那个时候 rpc 框架主流用的还是 dubbo,每次都是半夜还是上线,上线上完基本都是凌晨 2-3 点。 为什么要半夜上线呢? 因为这个时候一般业务流量最低。 还有就是上线发布,每次都要人工等待一段几分钟。 因为 rpc 调用入口已经关闭了,但是本身可能还没有处理完。 那么有没有方法可以让服务的关闭更加优雅,而不是人工等待呢? 实现思路人工等待几分钟的方式一般可以解决问题,但是大部分情况是无用功,还比较浪费时间。 比较自然的一种方式是引入钩子函数。 当应用准备关闭时,首先判断是否存在处理中的请求,不存在则直接关闭;存在,则等待请求完成再关闭。 实现生产者和消费者是类似的,我们以生产者为例。 启动实现的调整
状态管理类这里我们引入 statusManager 管理整体的状态。 默认的如下:
就是对一个是否可用的状态进行维护,然后在 channel 获取等地方便于判断当前服务的状态。 钩子函数DefaultShutdownHook 实现如下:
(1)进行关闭前,首先判断通过 (2)当然,我们还需要考虑网络消息丢失的场景,不可能一直等待。 所以引入了超时中断,最大等待时间也是可以自行定义的。
(3)关闭之后 将 status 设置为 false,标识当前服务不可用。 小结随着 rpc 技术的成熟,优雅关闭已经成为一个很基本的功能点。 一个小小的改动,可以节约生产发布时间,早点下班陪陪家人。 希望本文对你有所帮助,如果喜欢,欢迎点赞收藏转发一波。 我是老马,期待与你的下次重逢。 开源地址
拓展阅读rpc-从零开始实现 rpc https://github.com/houbb/rpc |
|
网络协议 最新文章 |
使用Easyswoole 搭建简单的Websoket服务 |
常见的数据通信方式有哪些? |
Openssl 1024bit RSA算法---公私钥获取和处 |
HTTPS协议的密钥交换流程 |
《小白WEB安全入门》03. 漏洞篇 |
HttpRunner4.x 安装与使用 |
2021-07-04 |
手写RPC学习笔记 |
K8S高可用版本部署 |
mySQL计算IP地址范围 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 1:40:57- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |