我有一个 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] 删除。
我来说两句