将套接字客户端与 NestJs 微服务结合使用

Dan*_*iel 5 javascript sockets node.js microservices nestjs

我最近开始使用 NestJs 并在尝试使用TCP 客户端测试我的NestJs 微服务应用程序时获得了库存

是否可以触发@EventPattern@MessagePattern()使用非嵌套应用程序?

尝试此方法时,套接字客户端只是停留在trying to connect.

有任何想法吗?

谢谢。

Kim*_*ern 8

2020 年 2 月更新

从 nest v6.6.0 开始,将外部服务与消息反序列化器集成变得更加容易。
看看对应的PR


原答案

您必须正确设置端口才能将其与 nest 一起使用:

您要发送的模式是

<json-length>#{"pattern": <pattern-name>, "data": <your-data>[, "id": <message-id>]}
Run Code Online (Sandbox Code Playgroud)

例子:

76#{"pattern":"sum","data":[0,3,3],"id":"ce51ebd3-32b1-4ae6-b7ef-e018126c4cc4"}
Run Code Online (Sandbox Code Playgroud)

参数id是 for @MessagePattern,没有它@EventPattern会被触发。

在此处输入图片说明

在您main.ts设置嵌套服务器。这是您要从 Packet Sender 发送到的端口(在 1 处输入)。

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

然后,您希望您的 Nest@Client收听来自 Packet Sender 的消息(请参阅图像中的位置 2)

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

然后连接您的客户端:

async onModuleInit() {
  await this.client.connect();
}
Run Code Online (Sandbox Code Playgroud)

并定义一个@MessagePattern

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

如您所见,在示例中,我正在发送[0,3,3]和嵌套正确响应 sum 6