NestJS 微服代码组织

组织代码之前看 NestJS 社区有什么?

  • 具有 workspace 的功能包管理工具 pnpm/yarn/npm 等
  • NestJS CLi 提供的 monorepo 模式
  • Nx 一个全栈管理框架
  • Turbo monorepo 管理工具

以下文章都建立在 pnpm + workspace 基础上, 以 gRPC 为例的微服务。

以 api-gateway 方式暴露 api

此模式的特点是: api-gateway 方式实现 api,但是具体的业务逻辑放在微服务汇总,api-gateway 实现的内容需要通过 gRPC 调用远程微服务函数实现。

特点:

  • 使用 api-gateway 服务对外暴露 api。
  • 使用 微服务 完成业务逻辑。
  • 使用 tcp/gRPC 等在 api-gateway 服务器之间进行通信。
  • 自己就是一整模块功能的实现。

缺点:

  • 功能不单一,有业务聚合性。

进阶:

  • 聚合接口:有些模块不需要实现自己的业务,但是需要对外暴露接口,此需要聚合其他业务的微服务,使得此时开发的层级加深。

一个目录结构:

ts 复制代码
.
├── REAMEME.md
├── package.json
├── packages
│   ├── api-gateway
│   └── ms-user
├── pnpm-lock.yaml
└── pnpm-workspace.yaml

服务与微服务

此模式的特点是:微服务与服务一起对外暴露,服务一般对外暴露 api, 而 微服务一般用来暴露内部通信使用。

特点

  • 自己就是一个 api-gateway,功能专一
  • 一般需要实现两套 api, http api 对外,给 nginx 等方向代理,gRPC 等微服务,对内,提供给其他微服务。

缺点

  • 每一个模块就是一个项目,单人的管理难度增大。

看起来目录结构:

tree 复制代码
.
├── REAMEME.md
├── nginx
│   └── nginx.conf
├── package.json
├── packages
│   ├── ms-link
│   ├── ms-tag
│   └── ms-user
├── pnpm-lock.yaml
└── pnpm-workspace.yaml

管理微服务

启动微服务

使用 pnpm 的平行运行脚本能力

sh 复制代码
{
    "scripts": {
        "dev:be": "pnpm -r --parallel --filter=./packages/* run start:dev",
    }
}

要运行 packages 目录下的所有项目,启动命令是 run start:dev, pnpm 会以颜色作为区分输出不同的醒目的输出内容。

启动具有 debug 功能的微服务

此处以 VS Code 为例,添加 launch.json 文件, 同时还需要在 pnpm 的根目录添加脚本配置

  • 根目录脚本
ts 复制代码
{
    "scripts": {
        "dev:api-gateway": "pnpm run --filter=api-gateway start:dev",
        "dev:ms-user": "pnpm run --filter=ms-user start:dev",
    }
}
  • VS Code 对应的配置
json 复制代码
{
  "version": "0.2.0",
  "configurations": [
    {
      "type": "node",
      "request": "launch",
      "name": "api-gateway",
      "runtimeExecutable": "pnpm",
      "args": ["run", "dev:api-gateway"],
      "skipFiles": ["<node_internals>/**"],
      "console": "integratedTerminal"
    },
    {
      "type": "node",
      "request": "launch",
      "name": "dev:ms-user",
      "runtimeExecutable": "pnpm",
      "args": ["run", "dev:ms-user"],
      "skipFiles": ["<node_internals>/**"],
      "console": "integratedTerminal"
    }
  ]
}

在后就可以在 VS Code 调试中找到配置可选的调试工具了。

小结

本文主要探索了 NestJS 微服代码组织探索,两种模式:一种是 api-gateway 实现业务逻辑,另外一种是全部微服务化使用 nginx 实现反向代理。然后再 VS Code 中实现了启动调试微服务的能力。希望这些探索能够帮助大家。

相关推荐
Jmyd012331 分钟前
Web端3D营销展厅技术实现路径:从素材上云到线索回流的数据链路
前端·3d·性能优化·三维数字化
砚凝霜1 小时前
【软考信息安全】第二十二章 Web服务器安全分析与增强——Apache与IIS
服务器·前端·安全
大鸡腿同学1 小时前
手心向上,手心向下
后端
CCblandy2 小时前
令牌桶在 0.9 倍负载超发 19%、固定窗口边界放行 20 个:四种限流算法同构实测
后端·python·算法·性能优化·架构
u0111026753 小时前
JPG、PNG、WebP 怎么选?按透明度、体积和使用场景做判断
前端·javascript·vue.js·图像处理·ai作画
jerrywus3 小时前
让 AI 写完代码后交一份报告:我改造了 answer-me-with-html
前端·claude·cursor
派小心.4 小时前
小程序分享链路中来源参数的传递校验
大数据·前端·数据库·人工智能·小程序·数据分析
凤山老林4 小时前
Spring Boot 集成 Sa-Token 实现高可用权限认证:登录鉴权、动态路由权限与接口防重放实战
spring boot·后端·sa-token·bootstrap
hhb_6184 小时前
一键生成数据看板,ECharts实战演示
前端·javascript·echarts
Java后端的Ai之路4 小时前
08_React组件API
前端·react.js·前端框架