Используйте сокет-клиент с микросервисом NestJs - PullRequest
0 голосов
/ 11 апреля 2019

Я недавно начал работать с NestJs и приобрел его, пытаясь протестировать мое приложение NestJs microservices с использованием TCP-клиента

Можно ли вызвать @EventPattern или @MessagePattern() с помощью приложения, не являющегося гнездом?

При попытке этого метода клиент сокета просто застрял на trying to connect.

Есть идеи?

Спасибо.

1 Ответ

1 голос
/ 11 апреля 2019

Вы должны правильно настроить порты, чтобы использовать его с гнездом:

Шаблон, который вы хотите отправить:

<json-length>#{"pattern": <pattern-name>, "data": <your-data>[, "id": <message-id>]}

Пример:

76#{"pattern":"sum","data":[0,3,3],"id":"ce51ebd3-32b1-4ae6-b7ef-e018126c4cc4"}

параметр id предназначен для @MessagePattern, без него будет срабатывать @EventPattern.

enter image description here

В вашем main.ts вы настраиваете сервер гнезд,Это порт, который вы хотите отправить от Packet Sender (введите в 1).

const app = await NestFactory.createMicroservice(AppModule, {
  transport: Transport.TCP,
  options: { host: 'localhost', port: 3005 },
  //                            ^^^^^^^^^^
});

Затем вы хотите, чтобы ваше гнездо @Client прослушивало сообщения от отправителя пакета (см. Позицию 2 на изображении)

@Client({
  transport: Transport.TCP,
  options: { host: 'localhost', port: 52079 },
  //                            ^^^^^^^^^^^  
})
private client: ClientTCP;

Затем подключите ваш клиент:

async onModuleInit() {
  await this.client.connect();
}

и определите @MessagePattern:

@MessagePattern('sum')
sum(data: number[]): number {
  console.log(data);
  return data.reduce((a, b) => a + b, 0);
}

Как вы можете видеть, в примере я отправляю [0,3,3], и гнездо правильно отвечает суммой 6.

...