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} 但错误仍然存在。
我也遇到了同样的错误,今天终于解决了。
\n在我的项目中,有一个 api 网关作为混合应用程序来接收请求并将数据传递到其他系统,每个第二个请求都会出现如下错误。
\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);\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
4562 次 |
| 最近记录: |