Sto prendendo in considerazione due tipi di notifiche:
- Eventi di dominio utilizzati internamente in un contesto limitato
- Eventi di applicazione utilizzati per scambiare messaggi di notifica tra contesti limitati
Ogni aggregato nel mio contesto limitato definisce il proprio limite di transazione, in modo tale che solo un aggregato viene modificato per transazione. Quando una transazione viene eseguita correttamente, un evento di dominio viene pubblicato in modo asincrono e internamente al fine di informare gli altri aggregati del contesto limitato che qualcosa è successo.
Alcuni servizi applicativi nel contesto limitato reagiscono a questi eventi. Ognuno aggiorna un aggregato in una transazione separata. Alla fine, tutti gli aggregati del contesto limitato sono resi alla fine coerenti.
Ho bisogno di pubblicare alcuni di questi eventi di dominio in altri contesti limitati. Ma mi sentirei più a mio agio se potessi mantenere un accoppiamento lento tra gli eventi del dominio di ogni contesto limitato e i messaggi di notifica scambiati tra i contesti limitati. Inoltre, posso prevedere situazioni in cui non esiste sempre una corrispondenza 1-1 tra eventi di dominio ed eventi applicativi, retoricamente parlando.
Allora ho alcune domande:
- Si tratta di un utilizzo corretto degli eventi di dominio all'interno di un contesto limitato?
- Se il contenitore / VM che ospita il contesto limitato (implementato in un micro-servizio) si arresta in modo anomalo prima che tutti gli aggregati siano resi eventualmente coerenti, ho uno stato incoerente quando il micro-servizio viene riavviato. Nel suo libro rosso, Vaughn Vernon suggerisce l'implementazione di un negozio di eventi. Ci sono molti vantaggi nell'avere un negozio di eventi, ma tra tutti questi vantaggi, aiuterà a risolvere il problema di incoerenza?
- Devo davvero separare gli eventi di dominio dagli eventi delle applicazioni?
- Se implemento un negozio di eventi per gli eventi del dominio, qual è la strategia migliore per trasformare questi eventi di domini in eventi applicativi e inoltrare questi eventi applicativi ad altri contesti limitati, assicurandoti che se il recapito di un messaggio di notifica fallisce, può essere riconsegnato quando necessario?