Due modelli di integrazione aziendale sono il messaggio di comando e il messaggio di evento . Sto lavorando a un sistema in cui utilizziamo la messaggistica non solo per l'integrazione con altri sistemi, ma per la comunicazione interna tra servizi. Dovrebbe essere un sistema eventualmente coerente , e i servizi dovrebbero essere ignoranti l'uno dell'altro (ad eccezione di un paio di servizi speciali). Pertanto, cerchiamo di evitare cose che sembrano chiamate di procedure remote (RPC o RPI). Abbiamo un sistema di middleware orientato ai bus e ai messaggi e tutti i messaggi vengono trasmessi.
Tendiamo a nominare i nostri messaggi come eventi, cioè come una frase del passato perfetta, ad es PurchaseOrderShipped
. Tuttavia, gli eventi vengono spesso aggiunti solo quando alcuni altri servizi devono conoscerli e, all'inizio, spesso interessa solo un servizio. Inoltre, a volte quel servizio emette di conseguenza un evento, che viene ascoltato dal primo servizio. Quindi, se dovessi rappresentare l'interazione, sarebbe molto più simile al diagramma per il messaggio di comando nel link sopra (o anche al diagramma RPC) rispetto a quello per il messaggio di evento, sebbene, ancora una volta, questo non sia effettivamente implementato con messaggistica diretta ma trasmessa su un bus. Aggiungete a ciò il fatto che recentemente ho visto l'aggiunta di alcuni messaggi che sono chiamati come comandi, cioè una frase nell'imperativo, ad es BillShippedPurchaseOrder
.
La cosa strana è che i nomi dei messaggi e il modo in cui scorrono non cambiano se viene chiamato come evento o come comando. Quindi, come si determina se qualcosa dovrebbe essere un messaggio di comando o un evento? Questa è solo una differenza di semantica e denominazione o esiste una reale differenza di implementazione tra comando e messaggi di evento? Dato che tutti i nostri messaggi vengono trasmessi, significa che nessuno di loro è veramente un messaggio di comando?
request for information
funzionalità? Sembra naturale usare qualcosa come ilgetUserInfo(uid)
quale è un messaggio di comando che prevede una risposta. So che i messaggi di comando introducono l'accoppiamento, ma purtroppo in questo caso non vedo come implementarlo con i messaggi di evento. O va bene attenersi a comandare messaggi in alcune occasioni come questa?