Nestjs-远程服务中没有定义匹配的事件处理程序

时间:2019-05-12 09:12:55

标签: mqtt nestjs

我正在尝试使用微服务处理在线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';
    }
}

2 个答案:

答案 0 :(得分:0)

您应该使用

@EventPattern('test_ack')

而不是@MessagePattern来处理来自外部系统的事件。

答案 1 :(得分:0)

由于我没有编辑权限,因此将其发布为新答案。如以上答案所述。我们必须使用@EventPattern('test_ack')

发布的消息应采用{data: 'Your message'}格式,并应按照here的发布进行序列化。

client.publish('test_ack', JSON.stringify({data: 'test data'}))