NestJS生命周期
NestJS 生命周期
生命周期钩子方法 | 触发时机 | 用途 | 示例场景 |
onModuleInit() | 模块初始化完成时 | 模块级设置或初始化任务,如建立数据库连接 | MongoDB 数据库连接初始化 |
onApplicationBootstrap() | 所有模块初始化后,在侦听连接前 | 跨模块或全局执行的初始化任务,如启动日志服务 | 与支付网关的连接建立和外部服务的可用性检查 |
onModuleDestroy() | 收到终止信号后 | 模块销毁时的清理逻辑,如关闭数据库连接 | 模块资源清理,如关闭数据库连接 |
beforeApplicationShutdown() | 主动调用 app.close() 或接收到系统终止信号时 | 应用程序关闭前的整体清理和资源释放 | 保存状态,关闭外部服务连接,发送关闭通知 |
onApplicationShutdown() | 应用程序即将完全关闭时 | 应用程序关闭流程的最后阶段执行最终清理操作 | 资源释放,停止后台进程,清理缓存,记录日志 |
优雅关闭配置
app.js
优雅关闭测试
OnModuleDestroy, BeforeApplicationShutdown
用 while true 卡主,没一会就 gc 了; 注意里面要加 sleep
- 卡主方式
- 准对业务处理可以做本地计数器,如果计数器还有运行中业务就可以卡主;
- 也可以做标志,自某个变量之后其他请求直接拒绝,后面自定义补偿;
- 对于非严格场景,最好是设置一个最大超时时间
- 如果使用 pm2 docker k8s 参考这里
- 优雅关闭k8s pod docker pm2 nestjs bull
- pm2启动方式配置,pm2最大等待时间配置
- pod 下线前的处理
- webStorm 的 stop 按钮不好使,自己 build 打包后用 node 运行,ctrl+c 终止,这样测试没有问题(mac 操作系统)
Loading...