NestJS - 使用微服务获取文件流并使用 Observable return 到网关

NestJS - Using Microservice to fetch file stream and return to Gateway using Observable

目前我正在 nestjs 中构建一个 api 网关,它使用微服务(也在 nestjs 中)负责从远程服务器获取文件作为流。

查看 nestjs 文档,我找到了 class StreamableFile,但据我了解,这是直接在网关上使用。

我的微服务上的可读流已准备好 returned 到 api-gateway,但是这应该以块的形式发送到 api 网关,并且这个网关本身也会将这些块流式传输到前端。我不想在微服务或我的 api-gateway 中分配内存中的文件。

我的问题是要与微服务通信,我使用 ClientProxy,来自微服务的 return 必须是可观察的。

考虑到这一点,我一直在尝试以下操作但没有成功:

NestJS 微服务:

@MessagePattern('get_file_by_key')
getFileStreamByKey(
    keyFileName : string,
): Observable<any> {
    const stream = this.remoteServerService.getFile(keyFileName).createReadStream();
    return from(stream);
}

NestJS 网关(微服务消费者)

@Get('/file')
public getFile(): StreamableFile {        
    return new StreamableFile(this.clientProxy.send('get_file_by_key', 'theFileName'));
}

以上只是陈述我对此的想法,因为代码甚至无法编译,因为 clientProxy 的发送方法 return 是一个可观察对象,我需要 StreamableFile 构造函数的流。

不寻求立即解决方案,但至少寻求一些关于如何实施并从中学习的指导。我需要在我的 nestjs 微服务上使用 gRPC 吗?

提前致谢

我发现的解决方案是使用额外的库将流转换为 rxjs 可观察的,然后在 rxjs 可观察的流中使用 npm 库 rxjs-stream。