爱收集资源网

NestJS应用程序优雅关闭的秘诀

网络整理 2023-09-27 19:01

优雅关掉是指以受控且有序的形式关掉 Web 应用程序的过程,确保所有进程安全中止并关掉所有联接。这对于 Web 应用程序十分重要,因为它有助于避免数据遗失和毁坏,并确保用户不会留下不完整或失败的恳求。在这篇博文中,我们将深入研究高贵关掉的概念,并学习怎样在 NestJS 应用程序中实现它。

让我们开始吧!

为什么我们须要服务器正常关掉

在以下情况下app打不开无响应,正常关掉至关重要:

为 NestJS 应用程序实现高贵关掉

为了在应用程序中实现正常关掉,您须要捕获关掉讯号并创建一个函数,通过执行例如停止新恳求、完成正在进行的恳求或任务以及清除资源等任务来响应该讯号。在 NestJS 的上下文中,您可以借助该enableShutdownHooks()方法以及onModuleDestroy、beforeApplicationShutdown、 和 等生命周期风波来onApplicationShutdown有效地处理关掉序列。这些机制准许您响应特定的关掉讯号并执行操作,例如在应用程序关掉时关掉数据库联接和释放资源。

以下是有关怎样实现此操作的手册:

考虑以下代码:

import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';
async function bootstrap() {
  const app = await NestFactory.create(AppModule);
  app.enableShutdownHooks(); // Enable listening for shutdown hooks
  await app.listen(3000);
  // For illustration purposes, delay the shutdown
  setTimeout(() => {
    process.kill(process.pid, 'SIGTERM');
  }, 5000);
}
bootstrap();

如果您早已为 NodeJS 应用程序或特定 NodeJS 框架(如 ExpressJS)实现了正常关掉,您可能早已注意到,您须要server.close()从本机 Node Server 实例调用该方式来制止服务器接受新联接app打不开无响应,同时维护现有联接。但是,它可能会因为延后keep-alive联接或无响应恳求而造成服务器无责令挂起。使用该技巧的 NestJS 应用程序中也可能会出现此问题enableShutdownHooks()。要正确关掉服务器,您必须跟踪所有联接的创建并自行中止它们。为了实现这一点,您可以使用npmnestjs-graceful-shutdown上提供的包,它简化了 NestJS 应用程序的正常关掉过程。

app打不开无响应_app打不开无响应_app打不开无响应

以下是集成它的方式:

import { GracefulShutdownModule } from 'nestjs-graceful-shutdown';
@Module({
  imports: [
    GracefulShutdownModule.forRoot({
      cleanup: async (app) => {
        // releasing resources
        const myService = app.get(MyService);
        await myService.close();
      },
    })
  ],
  ...
})
class AppModule {}

import { setupGracefulShutdown } from 'nestjs-graceful-shutdown';
import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';
async function bootstrap() {
  const app = await NestFactory.create(AppModule);
  // Additional configuration for your NestJS app
  setupGracefulShutdown({ app });
  await app.listen(3000);
  // For illustration purposes, delay the shutdown
  setTimeout(() => {
    process.kill(process.pid, 'SIGTERM');
  }, 5000);
}
bootstrap();

该nestjs-graceful-shutdown软件包还提供配置选项来管理关掉服务器之前的资源清除。请参阅文档了解更多详尽信息。

结论

总之,在 NestJS 中实现正常关掉对于确保受控且有序的关掉过程至关重要。通过遵守这种步骤并借助该nestjs-graceful-shutdown软件包,您可以无缝管理关掉风波并避免关掉过程中出现中断。

app打不开无响应
上一篇:永恒之金:CE修改Eternium 下一篇:没有了
相关文章