【发布时间】:2020-10-20 04:49:06
【问题描述】:
我已经设置了一个如下所示的微服务架构:
- api-gateway (
NestFactory.create(AppModule);) - 服务 1 (
NestFactory.createMicroservice<MicroserviceOptions>) - 服务 2 (
NestFactory.createMicroservice<MicroserviceOptions>) ...
服务看起来像这样:
service.controller.ts
service.handler.ts
handler 类似于处理逻辑的典型单体应用中的服务。
目前,我通过以下方式捕获异常:
-
处理程序调用数据库并由于重复键(即电子邮件)而失败。
-
我捕获了这个异常并将其转换为
RpcException -
在 ApiGateway 中,我像这样捕获
RpcException:return new Promise<Type>((resolve, reject) => { this.clientProxy .send<Type>('MessagePattern', { dto: DTO }) .subscribe(resolve, (err) => { logger.error(err); reject(err); }); }); -
我必须再次捕获被拒绝的 Promise 和
throw an HttpException才能让ExceptionFilter发送正确的错误响应。在 Promise 中抛出错误而不是拒绝它是行不通的)
所以基本上,我有 3 个 TryCatch 块用于 1 个异常。 这对我来说看起来很冗长。
在 NestJS 微服务方面有没有更好的方法或最佳实践?
我们可以为this.clientProxy.send 接收到的反弹消息设置一个Interceptor 并通过管道将其发送给客户端,而不是显式捕获 2 次吗?
【问题讨论】:
标签: microservices nestjs