Un servizio A deve accedere ai servizi B, C e D per elaborare una richiesta. Attualmente questo è implementato come chiamate asincrone parallele da A a B, C e D. Una volta che tutti hanno risposto, il servizio A segue alcune logiche di business per creare un risultato finale dai risultati parziali ricevuti da B, C e D. Il risultato finale è quindi scritto in un DB.
Voglio utilizzare un broker di messaggi (ad esempio Kafka) e implementare la comunicazione basata sugli eventi tra i micro servizi. All'arrivo di una richiesta, A dovrebbe pubblicare un evento con carico utile appropriato. B, C e D essendo abbonati, riceveranno l'evento e inizieranno a lavorarci in parallelo. Ciascuno di essi pubblicherà i rispettivi risultati con i codici evento appropriati. La mia domanda è, come combinare i risultati parziali degli eventi pubblicati da B, C e D?
Nell'approccio precedente, A aveva il lusso di accumulare risultati parziali da ciascuna delle chiamate asincrone. Ma nell'approccio basato sugli eventi, A pubblica solo l'evento request_arrived. Quindi l'accumulo locale all'interno del servizio non è un'opzione.
Edit1: Questi micro servizi vengono implementati come AWS Lambdas. A rimane attivo (e ci costa più) mentre B, C, D sono occupati. Il ritardo di andata e ritorno in B, C, D può essere fino a 20 secondi. Nella comunicazione basata su messaggi A non dovrà attendere gli altri servizi. Ciò ridurrà il costo dell'infrastruttura.