Tech-USP: Realtime ist Default. Server-Sent Events (SSE) statt WebSocket-Setup. Cross-Aggregat-Updates über Multi-Stream-Projektionen.
Sicht des Käufers: Live-Updates wie bei Statuspages, Chats oder Dashboards funktionieren ohne externes Pusher/Ably-Abo. Ändert jemand einen Datensatz, sehen die anderen die Änderung, ohne die Seite neu zu laden.
Highlights
- SSE-Endpoint eingebaut:
/ssemit Heartbeat (15s), Bun-Idle-Timeout-Handling - Asynchroner Broadcast: Write-Handler emittiert Event, SSE-Consumer pickt es auf und broadcastet an verbundene Clients
- Pro Mandant getrennt: Clients sehen nur Events ihres Mandanten
- Multi-Stream-Projektion: aggregat-übergreifende Read-Models (z.B. Dashboard, das Events aus 5 Aggregaten zusammenführt)
- Dead-Letter-Queue: fehlgeschlagene Projektionen landen in einer eigenen Tabelle für Operations
- Saubere Multi-Instanz: bei mehreren API-Instanzen erhält jeder Client jedes Event genau einmal
Architektur-Tiefendoku
- event-dispatcher: Async-Delivery, Dead-Letter, Retention
- projections: Single-Stream vs Cross-Aggregat