我们可以允许 API 在 NestJS 中使用 MessagePattern 和 Rest 方法吗?

艾哈迈德·易卜拉欣

我有一个 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 请求?

艾哈迈德·易卜拉欣

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

我们可以在托管在 azure 服务器中的 rest api 中使用保留字吗

我们可以在Azure中使用PostgREST API吗

我们可以在Nestjs中使用所有节点npm软件包吗

我们可以把条件放在REST API上吗

我们可以一起使用LUIS和Text Analytics API吗

我们可以使用DRF创建Rest API视图以从服务器下载文件吗?

我们可以同时使用接口和事件吗?

在控制器中使用@Async和CompletableFuture可以提高我们api的性能?

我们可以使用c#启用DocuSign API的嵌入式和远程登录吗?

我们可以在 laravel eloquent 中使用 update() 和 find() 吗?

我们可以在多线程中使用MTLRenderPipelineState和MTLDepthStencilState吗?

我们可以在同一组件中使用ngModel和ngChange吗?

我们可以在IDE中使用spark.sql API创建表吗

我们可以在 Kafka Stream API 中使用 SQL 查询吗?

我们可以在If条件中使用IsDisplayed方法吗?

我们可以在 useReducers 方法中使用条件吗

我们可以用同样的方法使用 io.restassured 和 jayway 吗?

我们可以在caa的Buildgraph方法中仅使用initialstate和null状态吗?

我可以在REST API和RectJS中使用会话对象和会话ID进行身份验证吗?

我们可以在spring boot中基于rest api的路径参数实现@Conditional Bean吗?

我们可以通过WEB / REST API访问Apple Watch跟踪数据吗?

我们可以通过REST API创建HBase命名空间吗?

是否可以在 Sinch 中使用 rest API 接听和挂断?

我们可以在春季批处理中使用AmqpItemReader和AmqpItermWriter进行请求/答复用例吗?

我们可以在 oracle 中使用强制和可编辑选项从视图中创建物化视图吗?

我们可以在新的macOS Catalina 10.15 Beta中使用Xcode 10.2.1和Xcode 11 Beta吗

我们可以在 Pivotal Cloud Foundry 的不同空间中使用相同的主机名和域吗?

我们可以在AWS Lambda python运行时中使用gmail API发送邮件吗?

我们可以使用Flutter / Dart获得一个应用共享服务器(API)和客户端代码(iOS / Android / Web)吗?