使用带有 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 加入和发射到房间