我正在尝试使用微服务处理在线MQTT经纪人在主题test_ack
上发布的消息。但是我遇到了错误。
There is no matching event handler defined in the remote service.
我的代码:
main.ts
import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';
import { Transport } from '@nestjs/common/enums/transport.enum';
var url = 'mqtt://test.mosquitto.org';
async function bootstrap() {
const app = await NestFactory.createMicroservice(AppModule, {
transport: Transport.MQTT,
options: {
url: url
}
});
await app.listenAsync();
}
bootstrap();
app.controller.ts
import { Controller } from '@nestjs/common';
import { MessagePattern } from '@nestjs/microservices';
@Controller()
export class AppController {
constructor() {}
@MessagePattern('test')
ackMessageTestData(data:unknown) {
console.log(data.toString());
return 'Message Received';
}
}
答案 0 :(得分:0)
您应该使用
@EventPattern('test_ack')
而不是@MessagePattern
来处理来自外部系统的事件。
答案 1 :(得分:0)
由于我没有编辑权限,因此将其发布为新答案。如以上答案所述。我们必须使用@EventPattern('test_ack')
。
发布的消息应采用{data: 'Your message'}
格式,并应按照here的发布进行序列化。
client.publish('test_ack', JSON.stringify({data: 'test data'}))
。