NestJS生命周期

NestJS 生命周期

生命周期钩子方法
触发时机
用途
示例场景
onModuleInit()
模块初始化完成时
模块级设置或初始化任务,如建立数据库连接
MongoDB 数据库连接初始化
onApplicationBootstrap()
所有模块初始化后,在侦听连接前
跨模块或全局执行的初始化任务,如启动日志服务
与支付网关的连接建立和外部服务的可用性检查
onModuleDestroy()
收到终止信号后
模块销毁时的清理逻辑,如关闭数据库连接
模块资源清理,如关闭数据库连接
beforeApplicationShutdown()
主动调用 app.close() 或接收到系统终止信号时
应用程序关闭前的整体清理和资源释放
保存状态,关闭外部服务连接,发送关闭通知
onApplicationShutdown()
应用程序即将完全关闭时
应用程序关闭流程的最后阶段执行最终清理操作
资源释放,停止后台进程,清理缓存,记录日志

优雅关闭配置

app.js

优雅关闭测试

  1. OnModuleDestroy, BeforeApplicationShutdown 用 while true 卡主,没一会就 gc 了; 注意里面要加 sleep
  1. 卡主方式
    1. 准对业务处理可以做本地计数器,如果计数器还有运行中业务就可以卡主;
    2. 也可以做标志,自某个变量之后其他请求直接拒绝,后面自定义补偿;
    3. 对于非严格场景,最好是设置一个最大超时时间
  1. 如果使用 pm2 docker k8s 参考这里
    1. 🗒️
      优雅关闭k8s pod docker pm2 nestjs bull
    2. pm2启动方式配置,pm2最大等待时间配置
    3. pod 下线前的处理
  1. webStorm 的 stop 按钮不好使,自己 build 打包后用 node 运行,ctrl+c 终止,这样测试没有问题(mac 操作系统)
Loading...
目录
文章列表
王小扬博客
产品
Think
Git
软件开发
计算机网络
CI
DB
设计
缓存
Docker
Node
操作系统
Java
大前端
Nestjs
其他
PHP