通过nestJS rabbit MQ,我使用RPC从一个服务器到另一个服务器。我基本上想要的是当消费者抛出错误时await this.amqpConnection.request
拒绝承诺。正如我从this和this以及本文档中所理解的,当您NACK(否定确认)消息,它应该将RPC响应放入相应的队列,并将错误信息传递给客户端。下面是一些代码示例:
制作者
import { AmqpConnection } from '@golevelup/nestjs-rabbitmq';
let amqpConnection: AmqpConnection;
sendMessage(payload: any) {
try {
const result = await this.amqpConnection.request({
exchange: 'user',
routingKey: 'test',
queue: 'test',
payload,
});
console.log(result);
} catch (e) {
console.error(e); // I expect this flow !!!
}
}
消费者:
@RabbitRPC({
exchange: 'user',
routingKey: 'test',
queue: 'test',
errorBehavior: MessageHandlerErrorBehavior.NACK
})
public async rpcHandler(payload: any): Promise<any> {
throw Error("Error text that should be proxied to console.error"):
}
但是消息甚至没有返回到客户端。客户端在超时后被拒绝,而不是因为消费者处理过程中的错误。如果我的理解不正确,我想知道nestjs是否有一个内置的机制来拒绝消息,而不需要手动创建一些错误的响应类型并在客户端处理它。
1条答案
按热度按时间z31licg01#
您应该完全从
@nestjs/microservices
抛出RpcException
,并且只使用特定的参数同样,如果您使用自定义异常过滤器,则它应该从
@nestjs/microservices
扩展BaseRpcExceptionFilter
。在ArgumentsHost
上调用getType()
方法,如果其结果等于'rpc'
,则使用super.catch
方法。