Quanti argomenti (code) utilizzare praticamente in un ESB

3

In tutti gli esempi di bus di servizio e le esercitazioni che ho visto, coprono la pubblicazione di un singolo messaggio in un singolo argomento raccolto da un singolo Sottoscrittore in ascolto. Sebbene ciò sia utile per una semplice panoramica pratica, non spiega in realtà come gli Argomenti dovrebbero essere usati nel mondo reale.

Ho una grande applicazione di e-commerce che si estende su molti sottodomini, come Order, Customer e Product management per nominarne alcuni, e userà un ESB per comunicare eventi tra questi diversi sistemi. Userò Pub-Sub tramite argomenti.

Inizialmente stavo usando un singolo argomento per ogni tipo di messaggio che stavo inviando, tuttavia potevo vedere che questo sarebbe diventato ingestibile in quanto il sistema avrebbe avuto troppi tipi di messaggi da inviare per giustificare un 1- to-1 Tipo di messaggio per argomento. per esempio. ProductCreate Argomento, ProductDelete Argomento.

Poi ho pensato che potevo usare un argomento per aggregato nel sistema. Tuttavia, a causa dei molteplici contesti limitati nel dominio, un aggregato in un sistema potrebbe essere diverso da un aggregato, con lo stesso nome, in un altro sistema. Quindi questa implementazione potrebbe essere abbastanza confusa.

Quindi avere un argomento per modello onnipresente sembra una soluzione migliore, e questo può essere basato sul modello di dati canonico usato per trasformare i messaggi attraverso il bus di servizio. È un approccio comune? O è la divisione degli Argomenti per preoccupazione funzionale un metodo migliore?

Riesco a vedere che ci saranno dei compromessi per qualsiasi implementazione scegliamo, quindi sono alla ricerca di buoni consigli, esempi storici di successi e insidie da evitare.

    
posta MrDeveloper 22.06.2015 - 16:20
fonte

1 risposta

2

Abbiamo lottato con la stessa scelta / sfida. Mappare solo 1 tipo di messaggio sull'argomento ASB non è pratico. Ma renderlo troppo generico (ad esempio l'invio di stringhe nel corpo del messaggio, usando la serializzazione personalizzata e dinamica ovunque) non era allettante.

Abbiamo finito per costruire una struttura leggera sopra ASB. Consente di inviare e ricevere più tipi di messaggi sullo stesso argomento e su tutte le sue sottoscrizioni, mentre utilizza la serializzazione nativa di ASB. Il trucco era quello di catturare il tipo di classe che viene inviata nel ContentType del messaggio. Più clienti di sottoscrizione (ciascuno consapevole del tipo a cui si preoccupano) ascolterebbe sullo stesso argomento allo stesso tempo. Un client specifico gestirà solo i messaggi del suo tipo e ignorerà (Abbandona) altri. Il nostro framework utilizza la riflessione dietro le quinte per chiamare i gestori dei messaggi, senza dubbio. Ma è astratto dal codice che si basa su di esso - tutto è strongmente digitato dal POV del cliente. Funziona sia per argomenti partizionati che non partizionati.

Non ho ancora dati su quanto overhead questo approccio possa introdurre e cosa significhi per sistemi di messaggistica ad alto volume. Usiamo ASB dall'applicazione on premise, dove la latenza ASB è alta per cominciare. Dovrebbe saperne di più in pochi mesi dopo il passaggio ad Azure completamente.

BTW non è sicuro al 100% di cosa intendi per "aggregato" o "modello di dati canonico", ma spero che questo aiuti.

    
risposta data 18.12.2015 - 15:43
fonte