
mek-bookings – Eventdriven bokningsmikrotjänst
Ett kollaborativt lärandeprojekt som utforskar eventdrivna mikrotjänster med Apache Kafka. Det här repot innehåller bokningstjänsten och frontend: ASP.NET Core, PostgreSQL, Kafka på Aiven och Server-Sent Events för realtidsuppdateringar i UI.
Teknikstack
C# · .NET 9 · ASP.NET Core · Minimal API · PostgreSQL · EF Core · Apache Kafka · Aiven · Confluent.Kafka · React · Vite · TypeScript · Tailwind CSS · Server-Sent Events · JSON · REST API
Problem / Kontext
Målet var att lära sig hur oberoende tjänster kommunicerar asynkront genom events istället för direktanrop. Bokningstjänsten behövde lagra bokningar, publicera events till Kafka, reagera på events från andra teams tjänster och pusha uppdateringar till frontend i realtid.
Lösning / Arkitektur
Bokningstjänsten lagrar data i PostgreSQL och publicerar boknings-events till Kafka. Andra tjänster i den bredare övningen reagerar asynkront. Tjänsten konsumerar även relevanta externa events och mappar inkommande förändringar tillbaka till bokningsstatus. En SSE-endpoint pushar uppdateringar till anslutna frontend-klienter så att UI:t uppdateras utan manuell omladdning. React + Vite + TypeScript-frontendet erbjuder ett praktiskt UI för att visa och hantera bokningar.
Så fungerar det – Arkitekturflöde
- 1En användare skapar eller uppdaterar en bokning via frontend eller API
- 2Bookings API persisterar datan i PostgreSQL
- 3Tjänsten publicerar booking-events till Kafka
- 4Andra tjänster i det bredare systemet reagerar asynkront
- 5Bookings-tjänsten konsumerar även relevanta externa events
- 6Inkommande förändringar mappas tillbaka till bokningsstatus
- 7SSE-strömmen pushar uppdateringar till anslutna frontend-klienter
- 8UI:t uppdateras utan manuell refresh
Mål
- Lära sig eventdriven tjänstkommunikation i praktiken
- Bygga och konsumera Kafka-events över tjänstgränser
- Integrera en PostgreSQL-backad mikrotjänst med asynkrona eventflöden
- Skapa en realtidsfrontend med Server-Sent Events
- Förstå cross-team-kontrakt och asynkron arbetsflödesdesign
Utmaningar
- Samordna eventkontrakt mellan team som jobbar på olika tjänster
- Konfigurera Kafka/Aiven-anslutning och certifikat
- Hålla frontend-state i synk med SSE-events
- Hantera statusmappning från externa tjänster
- Undvika dubbelbearbetning och hålla konsumenter robusta
Viktiga tekniska beslut
- Använda Kafka för asynkron tjänstkommunikation istället för synkrona REST-anrop
- Använda PostgreSQL + EF Core för persistent bokningsdata
- Använda SSE istället för en tyngre realtidslösning för enkelriktade server-till-klient-uppdateringar
- Ha en dedikerad frontend för att göra tillståndsförändringar synliga
- Strukturera projektet som ett realistiskt lärandecase snarare än ett perfekt produktionssystem
Resultat / Effekt
- En fungerande bokningsmikrotjänst med CRUD-orienterat bokningsflöde
- Publicerade och konsumerade Kafka-events över tjänstgränser
- Realtidsuppdateringar i UI genom Server-Sent Events
- Praktisk erfarenhet av asynkron tjänstkommunikation
- Praktiskt samarbete över tjänstgränser och delade meddelandekontrakt
Vad jag lärde mig
Det här projektet lärde mig hur eventdrivna system skiljer sig från request/response-tänkande. Jag lärde mig varför kontrakt mellan tjänster spelar roll, särskilt när flera team behöver enas om event-scheman utan tight coupling. Jag fick också se hur realtidsuppdateringar i UI kan drivas från backend-events via SSE, och hur distribuerade system introducerar tillståndskonsistensutmaningar som inte finns i en monolit.
Vad jag skulle förbättra härnäst
- Stärka idempotens och konsumenttillförlitlighet
- Lägga till mer observability kring eventhantering
- Formalisera kontrakt tydligare mellan tjänster
- Förbättra lokal utvecklingsuppsättning för multi-service-testning
- Utöka automatiserade tester kring eventflöden och SSE-beteende