In quale livello un microservizio dovrebbe inviare un messaggio a un altro microservizio

0

Nella nostra applicazione monolite, il codice utilizzato per gestire l'invio di SMS ed e-mail è stato scritto nel nostro livello aziendale. Ora la responsabilità di inviare e-mail e SMS è gestita da un microservizio. Lo chiamo SendMicroservice . Ora altri microservizi chiamano SendMicroservice se vogliono inviare e-mail e SMS. Diciamo che questo microservizio è chiamato WantsToSendMicroservice .

In genere, la norma nella nostra organizzazione è di avere un livello di servizio per parlare con il mondo esterno. Il livello aziendale per prendere decisioni e il livello di accesso ai dati per parlare con i database, solo una tipica architettura a N-layer.

Ora in quale strato di WantsToSendMicroservice , dovrebbe parlare con SendMicroservice ? Attualmente nella nostra organizzazione, è fatto nel livello aziendale. Ma loro parlano solo con SendMicroservice . In genere nessuna decisione viene presa lì. Il livello aziendale è il luogo ideale in cui i microservizi possono parlare tra loro o che dovrebbero essere eseguiti in un altro livello? Forse il livello di servizio o qualche altro?

    
posta kumarmo2 06.10.2018 - 08:00
fonte

2 risposte

1

Idealmente parlando con risorse esterne (micro-servizi) dovrebbe far parte del livello infra. Si tratta di servizi che in genere parlano di risorse esterne e non fanno parte del dominio del problema principale.   Sarà facile in futuro se vogliamo sostituire l'infra esistente (nel tuo caso SendMicroservice), può essere fatto facilmente senza modificare il livello aziendale. Per riferimento: link

    
risposta data 06.10.2018 - 18:18
fonte
1

Da ciò che ho raccolto, SendMicroservice è interno e ha già astratto le dipendenze utilizzate per generare SMS o e-mail. Non ci sono molte ragioni per isolarlo ulteriormente nel servizio clienti. Lo terrei nel livello aziendale perché ha preso una decisione: quella di inviare una notifica per una determinata azione. Non so se hai deciso i metodi di comunicazione, ma se possibile evita un sincrono che può fallire. Una coda funzionerebbe bene qui. Anche se SendMicroservice viene chiamato in modo sincrono, il suo endpoint dovrebbe solo ricevere e validare e memorizzare l'elemento da elaborare da una coda per disaccoppiare i fallimenti / tentativi.

    
risposta data 08.10.2018 - 00:52
fonte