TypeScript 微服务:从零到一的架构与实践

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

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

开始课程

引言:为何 TypeScript 是微服务的理想选择

现代后端开发正日益从单体架构转向微服务架构。TypeScript 作为 JavaScript 的严格类型超集,提供了灵活性与可靠性的独特组合。编译时的静态类型检查能够在集成错误进入生产环境前将其捕获,而丰富的生态系统(NestJS、Express、Fastify)则为构建分布式系统提供了现成工具。

本文将覆盖从架构设计到 TypeScript 微服务部署的完整周期。您将学习如何组织服务间通信、配置消息代理以及确保容错性。



1. TypeScript 微服务架构:关键原则

1.1 领域分解

第一步是将业务逻辑分解为独立服务。每个微服务负责其自身的限界上下文。在 TypeScript 中,这通过模块和包得以自然表达。

在线商店的分解示例:

  • 认证服务 — 认证与 JWT 令牌
  • 商品服务 — 商品目录与价格
  • 订单服务 — 下单与历史记录
  • 支付服务 — 支付处理

每个服务都是一个独立的 TypeScript 应用,拥有自己的 package.json、配置文件和入口点(main.ts)。



1.2 技术栈选择

为快速启动,推荐使用 NestJS — 一个原生支持微服务模式的框架。它提供了 TCP、Redis、RabbitMQ、Kafka 和 gRPC 等传输适配器。

基础技术栈:

  • 语言:TypeScript(严格模式,strict: true)
  • 框架:NestJS
  • 消息代理:RabbitMQ(通过 @nestjs/microservices)
  • 数据库:PostgreSQL(每个服务拥有独立数据库)
  • 容器化:Docker + Docker Compose


1.3 交互模式

主要有两种方式:同步(HTTP/gRPC)和异步(队列)。对于时间敏感操作,使用同步请求;对于后台任务,使用队列。

NestJS 中混合服务配置示例:

// main.ts — 微服务入口import { NestFactory } from '@nestjs/core';import { MicroserviceOptions, Transport } from '@nestjs/microservices';import { AppModule } from './app.module';

async function bootstrap() { // 用于 REST API 的 HTTP 服务器 const app = await NestFactory.create(AppModule); // 连接 RabbitMQ 实现异步通信 app.connectMicroservice<MicroserviceOptions>({ transport: Transport.RMQ, options: { urls: ['amqp://localhost:5672'], queue: 'orders_queue', queueOptions: { durable: true }, }, });

await app.startAllMicroservices(); await app.listen(3000);}bootstrap();


2. 实践实现:从数据模型到 API

2.1 创建共享类型包

为避免服务间接口重复,将通用类型提取到独立的 npm 包中(例如 @mycompany/shared-types)。这是 TypeScript 的关键优势——为所有服务提供单一事实来源。

// shared-types/src/dto/order.dto.tsexport interface CreateOrderDto {  userId: string;  productId: string;  quantity: number;  totalPrice: number;}

export interface OrderResponse { id: string; status: 'pending' | 'confirmed' | 'cancelled'; createdAt: Date;}


2.2 实现商品服务(REST API)

商品目录服务。使用 TypeORM 连接 PostgreSQL 和 NestJS 装饰器

博客

书籍推荐