简介
微服务和 http 服务之间用 TCP 通信。
用 nest 跑个微服务的步骤如下:
- 用 nest new 创建一个 main 服务,一个微服务
- 都要安装 @nestjs/microservices 包,因为用到其中的 api
- 微服务里用 createMicroservice 启动服务,选择传输方式为 TCP,指定端口
- 微服务里在 Controller 使用 MessagePattern 或者 EventPattern 注册处理消息的 handler
- main 服务使用 ClientsModule.register 来注册微服务
- main 服务里注入 ClientProxy 对象,调用它的 send 方法给微服务发消息
这就是 Nest 跑微服务的方式。
各自启动自己
然后main 使用 clientsModule 注册其他两个服务
参考代码
nest-microservice-demo
QuarkGluonPlasma • Updated Dec 26, 2023
服务间通讯协议
Nest 内置了几种不同的微服务传输层实现,它们定义在
@nestjs/microservices
包的 Transport
模块内,我们简单的进行归类:- 直接传输:TCP
- 消息中转:REDIS、NATS、MQTT、RMQ、KAFKA
- 远程过程调度:GRPC
服务间通讯模式
Nest microservice中,通讯模式有两种:
- Request-response模式,当需要在内部服务间交互讯息时使用,异步的response函数也是支持的,返回结果可以是一个Observable对象。
- Event-based模式,当服务间是基于事件的时候—我们仅仅想发布事件,而不是订阅事件时,就不需要等待response函数的响应,此时Event-based模式就是最好的选择。
为了在微服务间进行准确的传输数据和事件,需要用到一个称作模式(pattern)的值,pattern是由我们进行自定义的一个普通的对象值,或者是字符串,模式相当于微服务之间交流的语言,当进行通讯时,它会被自动序列化并通过网络请求找到与之匹配的服务模块。
消息代理通信
Loading...