Ein Benutzer möchte auf der Seite einen Film auswählen. Anschließend will er einen Sitzplatz reservieren. Zuletzt will der benutzer sein Ticket noch herunterladen können.
Ausbau auf mehrere Sitzplätze pro Reservierung, Benutzer, Bank?
Backend: C#: Entity Framework Core - ASP.NET, eventuell JavaScript (TypeScript) mit Express oder Java mit Spring Boot
Falls Zeit für ein kleines Frontend bleibt: TypeScript: Angular
MariaDB/ MySql
Synchron: Http (REST)
Dateinformat: JSON
Asynchron:
Falls noch Zeit nach der Synchronen Lösung bleibt.
Als Messagebus wäre Azure Message Bus, NServiceBus, RabbitMQ möglich. ALlerdings noch keine Lösung für transactional outbox bei Azure Service Bus gefunden (für die basic Preisklasse).
Message Broker: RabbitMQ
Alternativer Name für EmailService: NotificationService
- Der Ticketservice muss die Sitze bereits beim POST request reservieren. Schlägt allerdings der PDF oder Email Service fehl, muss das Ticket wieder gelöscht werden.
- PDFSerrvice braucht eigentlich keine Compensating Transaction, außer er updated eventuell den Status?
- Benötigt das Ticket einen Status?
- Domain von PDFService und EmailService (Daten von PDFService sind redundant)?
- Wenn PDFService die REST-Schnittstelle von MovieService und evt. Sitzplatzservice verwendet wieder coupling?
Durch das Consul Service Mesh können Services über deren namen erreich werden ("http://movieservice/api/movies", .....). Dies würde natürlich auch durch die Kubernetes Dns möglich sein. Außerdem kann man im yaml des Deployments festlegen unter welchen localhostports services erreichbar sein sollen.
Da wir Consul Service Mesh verwenden, existiert im Hintergrund auch eine Service registry.
Durch das Kubernetes Deployment wird jeder Pod automatisch mit einem Sidecar gestarted, welches den Services automatisch in consul registriert.
Siehe 4.3
Consul liefert unter anderem eine Health Check funktion mit.
Da wir ein ingress verwenden, verwenden wir auch ein API gateway.
Unsere Angular Application verwendet die CRUD Schnittstellen der Services.