nestjs整合websocketgateway和microservice
                    目录
                    
                
                
            nestjs整合websocketgateway和microservice
启因
使用WebsocketGateway做网关,接收客户端长连接后,将消息通过RabbitMQ消息队列转发到microservice,再做后续处理,microservice处理完成后,将结果也发送到RabbitMQ,WebsocketGateway接收到消息后,回传给客户端
目录结构
|  |  | 
文件
先看 WSGateway模块
WSGateway.ts
|  |  | 
ws-gateway.controller.ts
|  |  | 
ws-gateway.module.ts
注意:
- 在 providers中- 需要提供WSGateway,这样,app.module中才可以拿启动这个
- 需要提供SHARED_SERVICE,这个是注入用的共享服务,没有可以不要
- 需要提供WS_QUEUE_SERVICE, 这个很关键, 没这个,WSGateway就只会启动Websocket监听,不会启动微服务
- 上面这个好像不需要,去掉也能正常用,在app.module中创建就可以了
 
- 需要提供
|  |  | 
app
gateway.controller.ts, gatewary.service.ts与此无关,之前在里面也注入了WSGateway,结果所有的连接都被触发了两次,相当于启动了两个WSGateway服务.
gateway.module.ts
|  |  | 
main.ts
- 直接创建微服务就可以了,所以在ws-gateway.module.ts中的微服务创建就不需要了
- 因为在WSGateway.ts中的WebSocketGateway的修饰器中已经定义了端口3333,所以Websocket也会直接启动,不需要再app.listen(3333)了
|  |  | 
总结
到这里,client->websocket->rabbitmq->app service->rabbitmq->websocket->client 流程就通了.
中间走了些弯路,nestjs的文档感觉不是很全面和细致,然后我本身对nestjs的微服务也没有那么熟,所以花了些时间.
几个问题花了许多时间调试:
- 启动了两个WSGateway,所以一个连接会进来两次,这样我存的clients就不准,找不到对应的客户socket,就无法回复消息
- 怎么把WSGateway和microservice整合在一起,花了些时间,主要还是nestjs的模块架构,需要的时候要import,在本模块内要使用imports的模块中的controller等就需要在providers中加上,如果要给其它模块使用,就要在exports中加上.