什么是优雅停机:
就是对应用进程发送停止指令之后,执行的一系列保证应用正常关闭的操作。这些操作往往包括等待已有请求执行完成、关闭线程、关闭连接和释放资源等
就是对应用进程发送停止指令之后,能保证正在执行的业务操作不受影响,可以继续完成已有请求的处理,但是停止接受新请求
本质上是JVM即将关闭前执行的一些额外的处理代码
可以避免非正常关闭程序可能造成数据异常或丢失,应用异常等问题
优雅停机主要处理:
池化资源的释放:数据库连接池,HTTP 连接池,线程池
在处理线程的释放:已经被连接的HTTP请求
mq消费者的处理:正在处理的消息
隐形受影响的资源的处理:Zookeeper、Nacos实例下线等
未优雅停机:
当我们停止正在运行的应用程序或进程时,底层操作系统会向进程发送终止信号。在没有启用任何优雅关闭机制的情况下(如:kill -9),Spring Boot 应用程序将在收到信号后立即终止。
此时一些没有执行完的程序就会直接退出,可能导致业务逻辑执行失败,在一些业务场景下:会出现数据不一致的情况,事务逻辑不会回滚。
优雅停机使用场景:
一个基于springboot的服务,服务从网络接收请求,再把请求任务放入队列里交给线程池取异步消费请求任务。怎么样停止服务才能保证任务队列里的请求都处理完成了呢?
参考资料
Spring——项目优雅停机_springboot优雅停机_程序员小玖的博客-CSDN博客
SpringBoot 优雅停止服务的几种方法 - 第309篇_51CTO博客_springboot启动和停止服务
Kubernetes Pod的创建过程与删除过程_果果的技术博客_51CTO博客
https://www.cnblogs.com/cuishuai/p/14859182.html
Kubernetes:SpringBoot Pod的优雅关机 - 知乎