使用带有 NestJs 微服务的套接字客户端

Posted

技术标签:

【中文标题】使用带有 NestJs 微服务的套接字客户端【英文标题】:Use socket client with NestJs microservice 【发布时间】:2019-09-01 19:54:42 【问题描述】:

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

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

尝试此方法时,套接字客户端卡在trying to connect

有什么想法吗?

谢谢。

【问题讨论】:

是的,可以将nest 应用程序连接到非nest 客户端,但是您必须注意nest 的特殊处理,请参阅此答案:***.com/a/54294325/4694994 很难说是什么连接问题是没有看到您的设置。您可以发布代码的相关部分吗? 【参考方案1】:

2020 年 2 月更新

自nest v6.6.0 以来,使用消息反序列化器集成外部服务变得更加容易。 看看对应的PR。


原答案

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

你要发送的图案是

<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 中设置嵌套服务器。这就是您要从 Packet Sender 发送到的端口(在 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] 并且嵌套正确响应总和 6

【讨论】:

@kernkim 消息结构正是我所需要的。通过创建按摩[MSG_LEN]# pattern: "[PATTERN_STRING]", data: "[DATA]" 我可以发送自定义消息。恩克斯 我已经检查过了 - 这正是我想要它做的,但我无法让它工作。 HTTP/1.1 400 错误请求\r\n连接:关闭\r\n\r\n 。我正在使用这个示例github.com/nestjs/nest/tree/master/sample/03-microservices - 这似乎适用于内部通信 - 但我无法通过数据包发送方连接到服务。 @MartinThompson 我没有时间研究这个自动取款机,但是已经发生了一些变化,应该可以更轻松地集成外部服务。看看这个公关:github.com/nestjs/nest/pull/2653 如果您的问题仍然存在,也许打开一个新问题,以便有人可以查看它。 :) 感谢@KimKern。这实际上比我想象的要容易。我只是没有输入正确的模式: 它是:89#"pattern": "cmd": "sum" ,"data":[0,3,3],"id":"ce51ebd3-32b1-4ae6 -b7ef-e018126c4cc4"

以上是关于使用带有 NestJs 微服务的套接字客户端的主要内容,如果未能解决你的问题,请参考以下文章

无法在所有客户端 angular/nestjs 套接字 io 中接收数据

NestJs套接字身份验证,在handleConnection中发出事件

在 NestJs 中使用 Socket IO 加入和发射到房间

带有 JavaScript 客户端的 Java 套接字服务器

如何使用带有套接字的重叠 I/O?

NestJs Websocket,如何测试和调试“Socket hang up”?