NestJS 环境搭建
这里我使用的nrwl来初始化nest项目, nest cli 之类同理可以初始化项目出来
NestJS 初始化一个微服务
nestjs提供connectMicroService 和createMicroSerivice.
两者的不同点是在connectMicroService 是以一个socket主服务的额外服务存在.
由于nestjs支持多种服务化运行, 如http grpc 等等, socket主服务大部门可能大部份以http形式启动运行.
createMicroSerivice 是主服务就是微服务, 初入nestjs可以看下两个函数的api, 它们是非常不同的.
现在做测试, 用connectMicroService ,
app = createApplication();
app.connectMicroService({
transport: Transport.TCP,
options: {
port: 5557
}
})
好, 起了一个5557的tcp微服务.
默认的TCP服务
TCP的TCP服务其实是一个自定义的带长度的JSON数据SOCKET
传输格式为 len(int)#(char)json_str(string) 中间的#是固定的.
大致形式为 13#{"foo":"bar"} 这里json格式是任意写的, 实际上json有固定的字段.
{"partern": any, "data":any, "id"?:number } partern是一个可以序列化的object或字符串, 用于生成token, 生成token时key会做递归排序. id是可选的, 当id传了时, tcp服务端会返回一个销毁的消息
他大致像{"partern": "destroy", , "id":20 }
结论
所有的微服务需要映射到 类似 {"partern": "destroy", }的数据结构, 当然自己写类不用 partern 也是可行的, 自已的Controller注解不要继承于ParternMessage即可.
其他基于TCP的二进制数据转到对像时, 这个对像最好继承{"partern": any, "data":any, "id"?:number }, key值存在即可, partern 还要当token用, 用于Controller映射到请求