NestJS 创建微服务,可使用 NestJS CLI 的 monorepo 模式,在这种模式下:
- NestJS CLI 使用 nest-cli.json 来管理多个项目(应用和库)
- 所有项目共享一个根目录的 package.json
- 每个项目不需要自己的 package.json,因为它们通过 nest-cli.json 来定义 这种架构的好处是:
- 单一依赖管理
- 统一构建配置
- 共享 node_modules
通常,微服务项目包含网关、 认证服务、消息中间件、公共模块
通信方式
- gRPC :微服务之间同步高性能通信
- RabbitMQ :异步消息队列,解耦服务
- Kafka :事件流处理,事件溯源
server/
├── apps/
│ ├── gateway/ # API网关
│ ├── auth-service/ # 认证服务
│ ├── user-service/ # 用户服务
│ ├── chat-service/ # 聊天服务
│ ├── aigc-service/ # AI生成服务
│ ├── rag-service/ # RAG服务
│ ├── square-service/ # 广场服务
├── libs/
│ └── common/ # 公共库(配置、常量、gRPC、消息队列)
├── proto/ # gRPC proto文件
├── resources/ # 静态资源
├── scripts/ # 工具脚本
└── ...
gRPC proto
Protocol Buffers 是定义语言(在 .proto 文件中创建)、proto 编译器生成的用于与数据交互的代码、特定于语言的运行时库、写入文件(或通过网络连接发送)的数据序列化格式以及序列化数据的组合。 定义文件时,需要指定包名、service 方法定义,Request、Response 的数据格式