Nestjs中的NestFactory.create可以订阅kafka上的主题吗?

时间:2020-10-14 06:11:19

标签: apache-kafka architecture microservices nestjs

文档建议使用NestFactory.createMicroservice创建运输订阅应用。

我目前有一个基于REST的微服务,其中包含域逻辑和与数据库的连接。我想在该微服务上订阅Kafka消息。是否可以在单个微服务的范围内执行此操作?我在文档中看不到。

这让我怀疑模式是否应该:我应该使用NestFactory.createMicroservice创建一个额外的微服务,该服务将连接到Kafka,然后将消息通过REST分发到我的REST API。这意味着其余的api将在休息时发生所有可能的“动作”,但是间歇性的微服务将根据Kafka的消息触发它。

如果这是真的,那是否意味着随着我的应用程序扩展,我最终可能会在每个剩余的微服务上获得一个Kafka订阅微服务?还是会有一个订阅微服务会触发多个REST API?也许...这取决于用例?

1 个答案:

答案 0 :(得分:0)

以上是潜在的应用程序体系结构,尽管可以将两种方法嵌套在一起。微服务文档没有提及它,但是FAQ解释了如何制作Hybrid application

GRPC example将其显示出来

import { NestFactory } from '@nestjs/core';
import { MicroserviceOptions } from '@nestjs/microservices';
import { AppModule } from './app.module';
import { grpcClientOptions } from './grpc-client.options';

async function bootstrap() {

  const app = await NestFactory.create(AppModule);
  app.connectMicroservice<MicroserviceOptions>(grpcClientOptions);

  await app.startAllMicroservicesAsync();
  await app.listen(3001);
  console.log(`Application is running on: ${await app.getUrl()}`);
}
bootstrap();

通过这种方式,您可以在连接了kafka / rabbit / grpc的情况下获得rest api