TypeScript微服务:2024年入门指南

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

TypeScript微服务:迈向模块化架构的第一步

\n\n

想象一下,你在建造一栋房子。你可以先砌一堵巨大的墙,然后再添加房间。但如果一个房间坏了,整栋建筑都会受到影响。另一种选择是建造独立的模块:厨房、卧室、客厅,每个模块都有自己的布线和管道。微服务的工作原理大致如此——它们是独立的、松耦合的组件,通过网络进行通信。

\n\n

TypeScript用于微服务不仅仅是一种流行趋势,更是一种避免混乱的工具。静态类型检查在编译阶段就能捕获错误,而不是在生产环境中。在本文中,我们将探讨如果你想从单体架构转向TypeScript微服务,应该从哪里开始。没有废话,只有真实的代码示例。

\n\n

为什么选择TypeScript而不是纯JavaScript?

\n\n

当你编写微服务时,每个服务都是一个独立的项目。没有类型,很容易混淆:服务A期望什么数据格式?服务B返回什么?TypeScript解决了这个问题:

\n\n
    \n
  • 接口和类型——你清晰地定义了服务之间的契约。
  • \n
  • 自动补全和重构——IDE会提示对象的字段,重命名不会破坏代码。
  • \n
  • 与Node.js的兼容性——TypeScript编译成JavaScript,可以在任何有Node的地方运行。
  • \n
\n\n

示例:假设订单服务向配送服务发送数据。没有类型,你可能会不小心传递一个字符串而不是数字。TypeScript会告诉你:“嘿,这里期望的是number,但你发送的是string”。

\n\n

入门工具集

\n\n

要开始,你需要:

\n\n
    \n
  • Node.js(版本18+)——运行环境。
  • \n
  • TypeScript——全局安装或在项目中安装。
  • \n
  • NestJS——用于服务器端应用程序的框架。它原生支持微服务架构。
  • \n
  • RabbitMQ或NATS——用于异步通信的消息代理。
  • \n
  • Docker——每个服务的容器化。
  • \n
\n\n

别担心,所有这些都可以在15分钟内配置好。

\n\n

步骤1:使用NestJS创建第一个微服务

\n\n

NestJS就像后端的Angular。它使用装饰器、模块和提供者。安装它:

\n\n
npm i -g @nestjs/cli\nnest new user-service\ncd user-service\nnpm install @nestjs/microservices
\n\n

现在将普通应用程序转换为微服务。打开main.ts:

\n\n
import { NestFactory } from '@nestjs/core';\nimport { MicroserviceOptions, Transport } from '@nestjs/microservices';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.createMicroservice<MicroserviceOptions>(\n    AppModule,\n    {\n      transport: Transport.TCP, // 或 Redis, RabbitMQ\n      options: {\n        host: '0.0.0.0',\n        port: 3001,\n      },\n    },\n  );\n  await app.listen();\n  console.log('User microservice is listening on port 3001');\n}\nbootstrap();
\n\n

我们创建了一个监听TCP端口3001的微服务。现在在app.controller.ts中添加一个消息处理器:

\n\n
import { Controller } from '@nestjs/common';\nimport { MessagePattern, Payload } from '@nestjs/microservices';\n\n@Controller()\nexport class AppController {\n  @MessagePattern('get_user')\n  getUser(@Payload() data: { id: number }) {\n    // 模拟数据库查询\n    return { id: data.id, name: 'Alice', email: 'alice@example.com' };\n  }\n}
\n\n

搞定!第一个微服务已经准备好了。它接收模式为get_user的消息并返回用户数据。

\n\n

步骤2:创建第二个服务并组织通信

\n\n

我们再创建一个服务——order-service。它将向user-service请求数据。

博客

书籍推荐