
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 frontenddelen, med ASP.NET Core, PostgreSQL, Kafka på Aiven och Server-Sent Events för att hålla UI:t uppdaterat i realtid.
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
Syftet med projektet var att lära sig hur oberoende tjänster kommunicerar asynkront genom events istället för direkt tight coupling. Bokningstjänsten behövde persistera bokningsdata, publicera boknings-events, reagera på externa events från andra tjänster och hålla frontendet uppdaterat 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 fundamentalt 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 på nära håll hur realtidsuppdateringar i UI kan drivas direkt från backend-events via SSE, och hur distribuerade system introducerar debugging- och tillståndskonsistensutmaningar som inte finns i monolitiska upplägg.
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