Mikroservices in TypeScript: Architektur und Praxis von A bis Z

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Mikroservices in TypeScript: Architektur und Praxis von A bis Z

\n

In der modernen Webentwicklung weicht die monolithische Architektur flexiblen und skalierbaren Mikroservices. TypeScript mit seiner strengen Typisierung und leistungsstarken Werkzeugen ist zur idealen Sprache für den Aufbau solcher Systeme geworden. In diesem Artikel werden wir untersuchen, wie man Mikroservices in TypeScript entwirft und implementiert, unter Verwendung des beliebten Frameworks NestJS, des Message Brokers RabbitMQ und der Containerisierung Docker.

\n\n

1. Grundlagen der Microservice-Architektur in TypeScript

\n

Die Microservice-Architektur beinhaltet die Aufteilung einer Anwendung in unabhängige, lose gekoppelte Dienste. Jeder Dienst ist für seine eigene Geschäftslogik verantwortlich (z. B. Benutzerverwaltung, Auftragsabwicklung, Zahlungen) und kann separat entwickelt, bereitgestellt und skaliert werden.

\n\n

Warum TypeScript?

\n
    \n
  • Typisierung: Fehler zur Kompilierzeit, nicht zur Laufzeit. Besonders wichtig bei der Interaktion vieler Dienste über das Netzwerk.
  • \n
  • Schnittstellen und Typen: Ermöglichen die strikte Definition von API-Verträgen (z. B. DTOs für Anfragen/Antworten).
  • \n
  • Modernes JavaScript: TypeScript wird in reines JS kompiliert, das in Node.js läuft.
  • \n
\n\n

Betrachten wir ein einfaches Beispiel eines streng typisierten DTOs für den Benutzer-Mikroservice:

\n\n
// user.dto.ts\nexport interface CreateUserDto {\n  readonly email: string;\n  readonly password: string;\n  readonly name: string;\n}\n\nexport interface UserResponse {\n  id: string;\n  email: string;\n  name: string;\n  createdAt: Date;\n}
\n\n

Bei der Übertragung von Daten zwischen Diensten (über HTTP oder RabbitMQ) stellt TypeScript sicher, dass die Objektstruktur der erwarteten entspricht. Dies reduziert die Anzahl der Fehler drastisch.

\n\n

2. Implementierung eines Mikroservices mit NestJS

\n

NestJS ist ein progressives Framework für Node.js, das die Microservice-Architektur von Haus aus unterstützt. Es bietet Transporter für TCP, Redis, RabbitMQ, Kafka und gRPC.

\n\n

Erstellen wir einen grundlegenden Mikroservice zur Benutzerverwaltung unter Verwendung des RabbitMQ-Transporters.

\n\n

Schritt 1: Installation der Abhängigkeiten

\n
npm install --save @nestjs/core @nestjs/common @nestjs/microservices\nnpm install --save amqplib amqp-connection-manager
\n\n

Schritt 2: Erstellung des Hauptmoduls und des Controllers

\n
// user.controller.ts\nimport { Controller } from '@nestjs/common';\nimport { MessagePattern, Payload } from '@nestjs/microservices';\nimport { CreateUserDto, UserResponse } from './user.dto';\n\n@Controller()\nexport class UserController {\n  @MessagePattern('user.create')\n  async createUser(@Payload() data: CreateUserDto): Promise<UserResponse> {\n    // Hier die Logik zum Erstellen des Benutzers in der DB\n    console.log('Benutzer erstellen:', data);\n    return {\n      id: 'uuid-123',\n      email: data.email,\n      name: data.name,\n      createdAt: new Date(),\n    };\n  }\n}
\n\n

Schritt 3: Konfiguration der Hauptdatei für den Mikroservice-Modus

\n
// main.ts\nimport { 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.RMQ,\n      options: {\n        urls: ['amqp://localhost:5672'],\n        queue: 'user_queue',\n        queueOptions: {\n          durable: false,\n        },\n      },\n    },\n  );\n  await app.listen();\n  console.log('Benutzer-Mikroservice gestartet');\n}\nbootstrap();
\n\n

Somit verbindet sich unser Dienst mit RabbitMQ und hört auf die Warteschlange user_queue. Jeder andere Dienst (z. B. der Bestelldienst) kann Nachrichten an diese Warteschlange senden, um Benutzer zu erstellen oder abzufragen.

Blogs

Buchempfehlungen