NestJS 微服务错误“没有匹配的消息处理程序”

1 rabbitmq docker microservices nestjs

我正在构建一个应用程序,其中的微服务通过 RabbitMQ(请求-响应模式)进行通信。
一切正常,但我仍然遇到错误“远程服务中没有定义匹配的消息处理程序”的问题。-
当我将 POST 发送到客户端应用程序时,它应该只是通过客户端(ClientProxy)发送带有数据的消息,并且消费者应用程序应该响应。该功能确实有效,但总是只能第二次。我知道这听起来很奇怪,但在我的第一个 POST 请求中,总是有来自客户端的错误,而我的每一个 POST 请求都有效。然而这个问题在我的整个应用程序中随处可见,因此特定的 POST 请求仅用于示例。

这是代码:

客户:

@Post('devices')
async pushDevices(
    @Body(new ParseArrayPipe({ items: DeviceDto }))
    devices: DeviceDto[]
    ) {
    this.logger.log('Devices received'); 
    return this.client.send(NEW_DEVICES_RECEIVED, devices)
}
Run Code Online (Sandbox Code Playgroud)

消费者:

 @MessagePattern(NEW_DEVICES_RECEIVED)
 async pushDevices(@Payload() devices: any, @Ctx() context: RmqContext) {
    console.log('RECEIVED DEVICES');
    console.log(devices);
    const channel = context.getChannelRef();
    const originalMsg = context.getMessage();
    channel.ack(originalMsg);
    return 'ANSWER';
  }
Run Code Online (Sandbox Code Playgroud)

客户端的 RMQ 设置为queueOptions: {durable: true},消费者也有queueOptions: {durable: true}noAck: false

请您知道可能会导致问题的原因吗?我尝试使用 JSON.stringify 发送数据并将消息结构更改为 {data: devices} 但错误仍然存​​在。

Yi *_*Cai 6

我也遇到了同样的错误,今天终于解决了。
\n在我的项目中,有一个 api 网关作为混合应用程序来接收请求并将数据传递到其他系统,每个第二个请求都会出现如下错误。

\n
\n

错误:远程服务中没有定义匹配的消息处理程序。

\n
\n

然后我尝试删除下面代码中的 api-gateway 混合应用程序范围,错误消失了,希望这可以帮助您解决这个问题。

\n
 // api-gateway main.ts\n\n  const app = await NestFactory.create(AppModule);\n\n  // run as a hybrid app \xe2\x80\x94\xe2\x86\x92 remove it\n  app.connectMicroservice({\n    transport: Transport.RMQ,\n    noACK: false,\n    options: {\n      urls: [`amqp://${rmqUser}:${rmqPassword}@127.0.0.1:5672`],\n      queue: \'main_queue\',\n      queueOptions: {\n        durable: false,\n      },\n    },\n  });\n\n  // run hybrid app\n  await app.startAllMicroservices(); \xe2\x80\x94\xe2\x86\x92 remove it\n  await app.listen(3000);\n
Run Code Online (Sandbox Code Playgroud)\n