【发布时间】: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