【问题标题】:Can we allow an API to work using MessagePattern and Rest method as well in NestJS?我们可以允许 API 在 NestJS 中使用 MessagePattern 和 Rest 方法吗?
【发布时间】:2022-06-11 01:10:24
【问题描述】:

我有一个 BFF 需要向 ServiceA 发送一些请求。

ServiceA 提供了一些我们可以处理的 API(GET、POST、...)。 例如:

  @Get('greeting')
  getGreetingMessage(@Param('name') name: string): string {
    return `Hello ${name}`;
  }

在 NestJs 的微服务架构中,我看到 BFF 向其他服务发送请求的最佳实践是使用带有有效负载的 cmd 等消息模式。 例如

  constructor(
    @Inject('SERVICE_A') private readonly clientServiceA: ClientProxy,
  ) {}

  getGreetingFromServiceA() {
    const startTs = Date.now();
    const pattern = { cmd: 'greeting' };
    const payload = {};
    return this.clientServiceA
      .send<string>(pattern, payload)
      .pipe(
        map((message: string) => ({ message, duration: Date.now() - startTs })),
      );
  }

为此,我必须在 ServiceA 中支持 MessagePattern,例如:

  @MessagePattern({cmd: 'greeting'})
  getGreetingMessage(name: string): string {
    return `Hello ${name}`;
  }

所以我的问题是有没有办法将 MessagePattern 附加到 ServiceA 中的现有 API?所以我可以通过 Rest GET Request 或 BFF 的 MessagePattern 以 2 种不同的方式调用它们。 我正在考虑使用 2 个文档(Get 和 MessagePattern) 就这样

  @Get('greeting')
  @MessagePattern({cmd: 'greeting'})
  getGreetingMessage(@Param('name') name: string): string {
    return `Hello ${name}`;
  }

如果不是,那么如何使用 proxyClient 向 BFF 中的其他微服务发出 http 请求?

【问题讨论】:

    标签: microservices nestjs


    【解决方案1】:

    实际上,在 NestJS 中不可能为控制器中的同一个方法定义多个装饰器,但我们将其设为支持不同通信协议的混合应用程序,因此我们可以通过 TCP 或 HTTP 等方式调用它,如下所示例如https://docs.nestjs.com/faq/hybrid-application

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-03-20
      • 2014-12-15
      • 2017-05-27
      • 1970-01-01
      • 2021-04-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多