我最近开始使用 NestJs,并在尝试测试我的 NestJs microservices 时获得了库存。应用程序使用 TCP client

是否可以使用非 Nest 应用触发 @EventPattern@MessagePattern()

尝试此方法时,套接字客户端只是停留在尝试连接上。

有什么想法吗?

谢谢。

请您参考如下方法:

2020 年 2 月更新

自 Nest v6.6.0 起,将外部服务与消息反/序列化器集成变得更加容易。
看看对应的PR .

<小时 />

原始答案

您必须正确设置端 Eloquent 能将其与嵌套一起使用:

您要发送的模式是

<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将被触发。

在您的 main.ts 中,您设置了 Nest 服务器。这是您想要从数据包发送器发送到的端口(在 1 处输入)。

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

然后你希望你的嵌套@Client监听来自Packet Sender的消息(参见图像中的位置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],并且 Nest 正确响应了总和 6


评论关闭
IT虾米网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!