Microservices mit Claude Code: Node.js Architektur 2026

Microservices ermöglichen unabhängige Skalierung, Team-Autonomie und technologische Flexibilität — aber bringen auch Komplexität. Claude Code kennt Microservices-Muster: Service-Kommunikation, Event-Driven Architecture, API Gateway und Observability.

Service-Struktur und Kommunikation

ServicesSynchron vs. Asynchron

# Prompt: "Entwirf eine Microservices-Architektur für einen E-Commerce-Shop # mit User, Order, Product und Notification Service" // Synchrone Kommunikation: REST / gRPC für direkte Anfragen // order-service/src/client/product.client.ts import axios from 'axios' const PRODUCT_SERVICE = process.env.PRODUCT_SERVICE_URL! export async function getProduct(id: string) { const { data } = await axios.get(`${PRODUCT_SERVICE}/products/${id}`, { timeout: 3000, // Kurzes Timeout — Fail Fast headers: { 'X-Service-Name': 'order-service', 'X-Request-ID': requestContext.id } }) return data } // Circuit Breaker Pattern (opossum): import CircuitBreaker from 'opossum' const breaker = new CircuitBreaker(getProduct, { timeout: 3000, errorThresholdPercentage: 50, resetTimeout: 30000 }) breaker.on('open', () => logger.warn('Product service circuit OPEN')) breaker.on('halfOpen', () => logger.info('Circuit testing...'))

Event-Driven: RabbitMQ / Kafka

EventsAsynchrone Kommunikation mit Message Bus

# Prompt: "Implementiere Event-Driven Communication mit RabbitMQ # Order Created Event → Notification + Inventory Services" // shared/events.ts — Shared Event Types: interface OrderCreatedEvent { type: 'ORDER_CREATED' payload: { orderId: string userId: string items: Array<{ productId: string; quantity: number }> total: number createdAt: string } } // order-service: Publisher await channel.assertExchange('orders', 'topic', { durable: true }) await channel.publish( 'orders', 'order.created', Buffer.from(JSON.stringify({ type: 'ORDER_CREATED', payload: { orderId, userId, items, total, createdAt: new Date().toISOString() } })), { persistent: true, messageId: crypto.randomUUID() } ) // notification-service: Consumer await channel.assertQueue('notifications.orders', { durable: true }) await channel.bindQueue('notifications.orders', 'orders', 'order.*') channel.consume('notifications.orders', async (msg) => { if (!msg) return const event = JSON.parse(msg.content.toString()) try { await sendOrderConfirmation(event.payload) channel.ack(msg) } catch (error) { channel.nack(msg, false, false) // → Dead Letter Queue } })
Idempotenz-Tipp: Event Consumer MÜSSEN idempotent sein — dieselbe Message kann mehrfach ankommen. Prüfe immer ob das Event bereits verarbeitet wurde (z.B. via Event-ID in Redis/DB), bevor du die Aktion ausführst.

API Gateway mit Express

GatewayZentraler Einstiegspunkt

// api-gateway/src/index.ts — Claude Code konfiguriert: import { createProxyMiddleware } from 'http-proxy-middleware' import rateLimit from 'express-rate-limit' const app = express() // Rate Limiting app.use(rateLimit({ windowMs: 60 * 1000, max: 100 })) // JWT Auth Middleware app.use('/api', authenticateToken) // Service Routing app.use('/api/users', createProxyMiddleware({ target: process.env.USER_SERVICE_URL, changeOrigin: true, pathRewrite: { '^/api/users': '' }, on: { error: (err, req, res) => res.status(503).json({ error: 'User service unavailable' }) } })) app.use('/api/orders', createProxyMiddleware({ target: process.env.ORDER_SERVICE_URL, changeOrigin: true, pathRewrite: { '^/api/orders': '' } })) app.use('/api/products', createProxyMiddleware({ target: process.env.PRODUCT_SERVICE_URL, changeOrigin: true, pathRewrite: { '^/api/products': '' } }))

Docker Compose für lokale Entwicklung

DockerAlle Services lokal starten

# docker-compose.yml — Claude Code generiert vollständiges Setup: version: '3.9' services: api-gateway: build: ./api-gateway ports: ["3000:3000"] environment: USER_SERVICE_URL: http://user-service:3001 ORDER_SERVICE_URL: http://order-service:3002 PRODUCT_SERVICE_URL: http://product-service:3003 user-service: build: ./user-service environment: DATABASE_URL: postgresql://postgres:pass@postgres:5432/users order-service: build: ./order-service environment: RABBITMQ_URL: amqp://rabbitmq:5672 PRODUCT_SERVICE_URL: http://product-service:3003 rabbitmq: image: rabbitmq:3-management ports: ["15672:15672"] # Management UI postgres: image: postgres:16 environment: POSTGRES_PASSWORD: pass redis: image: redis:7-alpine # Caching + Rate Limiting
Wann KEINE Microservices: Unter 10 Entwicklern, Early-Stage Produkt, kein klares Domain-Boundary — dann lieber Modularer Monolith. Microservices lösen Skalierungsprobleme, die die meisten Startups noch gar nicht haben.

Architektur-Modul im Kurs

Im Claude Code Mastery Kurs: vollständiges Microservices-Modul mit Service-Kommunikation, Event-Driven Architecture, API Gateway, Distributed Tracing und Production-Deployment.

14 Tage kostenlos testen →