优雅关掉是指以受控且有序的形式关掉 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 应用程序的正常关掉过程。
以下是集成它的方式:
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软件包,您可以无缝管理关掉风波并避免关掉过程中出现中断。