spring boot 服务优雅停机.md 1.4 KB

spring boot 服务优雅停机

方法一:使用kill 而不是kill -9

kill

kill 对应的是kill -15 ,kill 程序时有以下特点

  • 系统会发送一个SIGTERM的信号给对应的程序。当程序接收到该signal后,将会发生以下的事情
    • 程序立刻停止
    • 当程序释放相应资源后再停止
    • 程序可能仍然继续运行
    • 大部分程序接收到SIGTERM信号后,会先释放自己的资源,然后在停止。但是也有程序可以在接受到信号量后,做一些其他的事情,并且这些事情是可以配置的。如果程序正在等待IO,可能就不会立马做出相应。也就是说,SIGTERM多半是会被阻塞的、忽略

kill -9

强制停止命令

方法二:spring actuator

开放shutdownendpoint,通过发送向该endpoint发送http请求来停机. curl -X Post localhost:8080/actuator/shutdown

amazon-subscription优雅停机方案

amazon-subscription在监控amazon aws消息队列, 消费后生成的数据会保存到clickhouse中, 但是由于clickhouse最高只支持100个并发,所以需要批量插入数据. 数据会缓存在内存中, 定时向clickhouse插入. 当服务被kill时, 如果内存中的数据不能被及时写入到clickhouse, 就会永远丢失. 解决方案如下:

  • 使用优雅停机, 保证服务在关闭前,有时间进行处理.
  • 监听spring事件ContextClosedEvent, 关闭listener, 再把缓存中的数据写入到clickhouse.