Skip to content
Tillbaka till Portfolio
mek-bookings – Eventdriven bokningsmikrotjänst

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.

Min roll: Grupp om 3 i bookings-tjänsten, i samarbete med två andra team över delade Kafka-eventflöden
2026

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

  1. 1En användare skapar eller uppdaterar en bokning via frontend eller API
  2. 2Bookings API persisterar datan i PostgreSQL
  3. 3Tjänsten publicerar booking-events till Kafka
  4. 4Andra tjänster i det bredare systemet reagerar asynkront
  5. 5Bookings-tjänsten konsumerar även relevanta externa events
  6. 6Inkommande förändringar mappas tillbaka till bokningsstatus
  7. 7SSE-strömmen pushar uppdateringar till anslutna frontend-klienter
  8. 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

Skärmdumpar

Utforska det här projektet