Il sistema è composto da diversi micro-servizi e ciascuno di essi è responsabile del proprio contesto, come prenotazioni, pagamenti, prodotti e notifiche.
Immaginiamo di avere un viaggiatore che cerca un alloggio sul sito web. L'alloggio è elencato recuperando le informazioni dai prodotti di micro-servizi. Traveller ha trovato quello che voleva e ha deciso di fare una prenotazione.
Seleziona data, numero di notti, persone ecc. e inoltra una richiesta di prenotazione per il servizio di micro-servizi. La richiesta contiene tutti i dettagli di pagamento e i dettagli della prenotazione. Ecco la parte divertente:
- Request crea un record di prenotazione con stato
pending
e pubblicato evento,reservation_created
. - Pool di servizi di pagamento per quell'evento, crea un'autorizzazione sulla carta di credito e pubblica l'evento
authorization_successfull
con l'ID di prenotazione all'interno del payload dell'evento. - Pool di microservizi di prodotto per
authorization_successful
evento e verifica se la sistemazione è realmente disponibile per il periodo richiesto. Se tutto è a posto, la sistemazione verrà contrassegnata come occupata per il periodo desiderato e pubblicaavailability_updated
evento. - Il micro-servizio di prenotazione si riunirà per quell'evento e cambierà lo stato della prenotazione in
approved
, che pubblicherà quindi un nuovo evento, quindi il micro-servizio delle notifiche può accumularlo e inviare le e-mail necessarie.
Ora ho diverse domande:
-
In teoria sembra bello, ma sto complicando troppo le cose, o questo è un modo per ottenere il disaccoppiamento?
-
Seguendo questo approccio, non posso informare il viaggiatore "Prenotazione completata" poiché vi è un lungo processo in background. La mia ipotesi è che il messaggio informativo dovrebbe essere più simile a "Prenotazione richiesta, riceverai presto un'email di conferma, o dovrei raggruppare uno degli endpoint di servizio con schermata di caricamento, o persino usare socket Web per inviare notifiche indietro?"