gpt4 book ai didi

typescript - 运行 NestJS 调度程序而不启动 HTTP 服务器

转载 作者:行者123 更新时间:2023-12-03 08:29:32 25 4
gpt4 key购买 nike

我正在尝试为 NestJS 创建一个“worker”,它基本上聚合来自多个数据源的数据。由于我将此工作线程部署到 Kubernetes 集群中,因此我不需要启动 NestJS 内部 HTTP 服务器,但是,如果没有 app.listen,调度程序就不会运行。

main.ts:

async function bootstrap() {
const app = await NestFactory.create(WorkerModule);
await app.listen(3030); // <-- I would like to delete this
}

bootstrap();

worker.module.ts

@Module({
imports: [
ScheduleModule.forRoot(),
],
providers: [
// Scrappers
DataScrapper,
],
})
export class WorkerModule {}

数据.scrapper.ts

@Injectable()
export class DataScrapper {
@Interval(1000)
async sync() {
console.log('fetching...');
}
}

最佳答案

NestJS 的核心是一个模块化框架,为节点/TS 生态系统提供强大的 DI 功能。顶级模块可以通过以下三种方式之一公开:

您可以通过使用自定义策略将应用程序创建为微服务来实现您想要的目标。我很可能会将此模式打包为 @golevelup/nestjs 的一部分生态系统(免责声明,我是作者),因为我最近越来越频繁地遇到这种模式。

import { CustomTransportStrategy } from '@nestjs/microservices';

class KeepAliveStrategy implements CustomTransportStrategy {
private closing = false;

wait() {
if (!this.closing) {
setTimeout(() => this.wait(), 1000);
}
}

listen(callback: () => void) {
callback();
this.wait();
}

close() {
this.closing = true;
}
}

async function bootstrap() {
const workerApp = await NestFactory.createMicroservice(WorkerModule, {
strategy: new KeepAliveStrategy(),
});

await workerApp.listen(() => console.log('listening'));
}
bootstrap();

这将使您的工作线程保持事件状态并允许其正确响应 NestJS 生命周期事件

关于typescript - 运行 NestJS 调度程序而不启动 HTTP 服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65555197/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com