本文档全面概述了 NestJS 微服务系统,解释了其架构、通信模式、支持的传输层和实现细节。它侧重于 NestJS 如何实现分布式系统中的服务间通信。有关基于 HTTP 的 RESTful 服务的信息,请参阅 平台适配器。
NestJS Microservices 是一个专用的模块,为构建面向服务的架构提供了一个强大的框架。与传统的基于 HTTP 的应用程序不同,NestJS 微服务可以通过各种传输层进行通信,并支持多种消息模式。
该系统基于两个主要抽象构建
来源: packages/microservices/client/client-proxy.ts38-233 packages/microservices/server/server.ts47-288 packages/microservices/interfaces/microservice-configuration.interface.ts25-33
NestJS Microservices 遵循灵活的架构,在客户端、传输和服务器之间分离关注点。这使得应用程序能够与底层传输机制无关地进行通信。
来源: packages/microservices/client/client-proxy.ts38-233 packages/microservices/server/server.ts47-288
NestJS Microservices 支持两种主要的通信模式
来源: packages/microservices/client/client-proxy.ts86-127 packages/microservices/server/server.ts163-180
NestJS Microservices 支持多种传输层,每种传输层都有其特定的实现和配置选项。
该框架内置支持以下传输机制
| 传输 | 描述 | 包依赖 |
|---|---|---|
| TCP | 使用 TCP 套接字(sockets)的默认传输 | Node.js 内置 |
| Redis | 使用 Redis pub/sub 进行通信 | ioredis |
| NATS | 使用 NATS 消息系统 | nats |
| MQTT | 使用 MQTT 协议 | mqtt |
| RabbitMQ | 使用 RabbitMQ 消息代理 | amqp-connection-manager, amqplib |
| Kafka | 使用 Kafka 进行事件流 | kafkajs |
| gRPC | 使用 gRPC 进行高性能 RPC | @grpc/grpc-js, @grpc/proto-loader |
来源: packages/microservices/constants.ts3-59 packages/microservices/package.json20-71
每个传输都需要特定的配置选项来建立连接。配置在创建微服务实例时提供。
来源: packages/microservices/interfaces/microservice-configuration.interface.ts25-272 packages/microservices/server/server-grpc.ts66-85
NestJS 微服务的客户端提供抽象,用于与微服务服务器通信,无论传输机制如何。
所有客户端实现都继承自 ClientProxy 基类,该类定义了通用功能。
来源: packages/microservices/client/client-proxy.ts38-233
每种传输机制都有其专用的客户端实现。
| 客户端类 | 传输 | 主要方法/特性 |
|---|---|---|
| ClientTCP | TCP | 使用套接字连接进行通信 |
| ClientRedis | Redis | 使用 Redis pub/sub 机制 |
| ClientNats | NATS | 使用 NATS 代理进行消息传递 |
| ClientMqtt | MQTT | 实现 MQTT 协议客户端 |
| ClientRMQ | RabbitMQ | 支持 RabbitMQ 消息模式 |
| ClientGrpcProxy | gRPC | 提供具有流式传输支持的 gRPC 客户端 |
客户端实现处理特定于每个传输的连接、断开连接、重新连接逻辑以及消息序列化。
来源: packages/microservices/client/client-tcp.ts16-216 packages/microservices/client/client-rmq.ts54-436 packages/microservices/client/client-grpc.ts31-402
客户端使用两种主要方法进行通信
send() - 用于请求-响应消息模式
emit() - 用于事件驱动消息模式
来源: packages/microservices/client/client-proxy.ts86-127 packages/microservices/test/client/client-proxy.spec.ts86-133
NestJS 微服务的服务器端接收和处理来自客户端的消息。
抽象类 Server 为所有特定于传输的服务器实现提供了基础。
来源: packages/microservices/server/server.ts47-288 packages/microservices/test/server/server.spec.ts6-15
每种传输机制都有其专用的服务器实现。
| 服务器类 | 传输 | 特性 |
|---|---|---|
| ServerTCP | TCP | 基于套接字的服务器,使用 JSON 通信 |
| ServerRedis | Redis | 使用 Redis pub/sub 进行通信 |
| ServerNats | NATS | 与 NATS 消息系统集成 |
| ServerMqtt | MQTT | 实现 MQTT 协议服务器 |
| ServerRMQ | RabbitMQ | 支持 RabbitMQ 队列模式和交换器 |
| ServerGrpc | gRPC | 实现具有流式传输支持的 gRPC 服务 |
来源: packages/microservices/server/server-tcp.ts29-227 packages/microservices/server/server-rmq.ts53-332 packages/microservices/server/server-grpc.ts56-726
服务器通过将传入的消息与注册的模式处理程序进行匹配来处理它们。
来源: packages/microservices/server/server.ts127-161 packages/microservices/server/server-rmq.ts226-284
gRPC值得特别关注,因为它通过使用 Protocol Buffers 进行消息定义和支持流式通信,与其他传输方式不同。
NestJS gRPC 集成需要 Protocol Buffer (.proto) 文件来定义服务。
来源: packages/microservices/server/server-grpc.ts551-573 packages/microservices/server/server-grpc.ts635-652
gRPC 支持四种类型的远程过程调用:
NestJS 通过专门的处理器支持所有这些模式。
来源: packages/microservices/server/server-grpc.ts233-259 packages/microservices/server/server-grpc.ts261-396
ClientGrpcProxy 提供了与 gRPC 服务交互的方法。
来源: packages/microservices/client/client-grpc.ts68-82 packages/microservices/client/client-grpc.ts154-293
NestJS 微服务为错误处理和重连策略提供了内置机制。
错误处理发生在多个级别:
来源: packages/microservices/client/client-proxy.ts139-158 packages/microservices/server/server.ts152-161
不同的传输方式实现了不同的重连策略。
来源: packages/microservices/client/client-redis.ts202-226 packages/microservices/client/client-rmq.ts77-85
NestJS 微服务提供上下文对象,以便在消息处理程序中访问特定于传输的信息。
来源: packages/microservices/ctx-host/base-rpc.context.ts packages/microservices/ctx-host/rmq.context.ts
上下文对象会传递给消息处理程序,允许在其中访问特定于传输的功能。
来源: packages/microservices/server/server-rmq.ts240-246 packages/microservices/server/server-grpc.ts262-269
NestJS 微服务提供了一个灵活的序列化系统,用于在传输格式和应用程序对象之间转换消息。
来源: packages/microservices/server/server.ts241-265 packages/microservices/client/client-proxy.ts208-232
每个传输器都通过配置支持自定义的序列化器和反序列化器。
来源: packages/microservices/interfaces/serializer.interface.ts packages/microservices/interfaces/deserializer.interface.ts
NestJS 微服务提供了一个强大而灵活的框架,用于使用多种通信模式和传输机制构建分布式系统。该架构允许轻松扩展和自定义,同时提供健壮的默认设置。
要点
有关特定传输方式的更多信息,请参阅传输层部分 4.1 或查阅 NestJS 文档。
来源: packages/microservices/package.json1-73 packages/core/package.json20-62
刷新此 Wiki
最后索引时间2025 年 4 月 18 日(86eb46)