Bus del messaggio di comunicazione del contesto del contesto delicato DDD
-
21-12-2019 - |
Domanda
Sto integrando diversi contesti limitati con bus di servizio di Windows e hanno alcune domande:
1) Come rilevare duplicati in altri contesti limitati? Conservare l'ultima sequenza dei messaggi elaborati? Voglio che la possibilità di ri-fuoco gli eventi per consentire la ri-sincronizzazione di nuovi contesti limitati HandleEvent(OrderPlaced orderPlaced, bool isReplay)
che vengono acquistati in produzione in futuro per una sincronizzazione iniziale.
2) Per il bus di messaggi inter-context, utilizzeremmo un argomento per contesto limitato (e avremo lo spazio dei nomi per raggruppare i contesti limitati)? O un singolo contesto limitato per namespace?
3) La documentazione del bus del messaggio dice che i messaggi possono arrivare fuori uso, quale algoritmo deve essere utilizzato per riassemblare in ordine? Cosa succederebbe se i messaggi 6 e 8 sono stati ricevuti, ma 7 non è mai arrivato? Aspetteremmo un tempo specificato e quindi continuare? Come consentire l'auto-riparazione?
4) Immagino che quanto sopra sia piuttosto comune in quasi tutti i progetti DDD, ci sono delle biblioteche che gestiscono la messaggistica incluso il protocollo di comando / risposta per richiedere la sincronizzazione di eventi precedenti da un contesto limitato all'estero?
Soluzione
Questo non risponde alla maggior parte delle tue domande, ma ti dà un'alternativa.
Un sacco di questi problemi è andato via quando ho iniziato a tirare eventi invece di averli spinti a me.Se sto tirando, tengo solo un checkpoint del numero dell'evento che ho elaborato.Quando ho bisogno di ricostruire, rimuovo i modelli di lettura e il checkpoint ei nuovi modelli di lettura verranno creati automaticamente.Dato che sto usando un singolo scrittore, i duplicati non sono un problema.Ordinare non è nemmeno un problema.
Abbiamo ancora degli eventi spinti anche però, ma questi vengono utilizzati solo per il comportamento reattivo.Per esempio;Quando viene posizionato un ordine, stampare un biglietto.
Se ciò ha senso per te, dipende da quanto è veloce per reagire alle cose, e quanto hai bisogno di avere i tuoi dati da essere (1 secondo contro 30 secondi, ecc.).