Ti darò i miei due centesimi.
but I also get the impression that it becomes much harder to track a message's path though the system.
Hai ragione che PubSub SOA architetture AKA (SOA 2.0) che fornisce una grande quantità di disaccoppiamento, ma anche paga un prezzo, perché questo è esattamente ciò che accade, anche se strumenti come Splunk possono aiutare una sacco.
seems that direct HTTP calls between services and/or a pubsub bus are two common approaches
In realtà se si guardano i quadri più utilizzati .net evento SOA (NServiceBus, mulo e MassTransit) non usano le chiamate HTTP, ma sì è possibile implementare un'architettura microservices e utilizzare http come protocollo di comunicazione.
Capisco che voglia iniziare ad applicare alcuni dei migliori concetti di architettura aziendale, ma direi che è meglio partire con fondazioni più semplici ma più forti. Non vi è alcun punto in cui tu salti all'evento soa, senza sapere se ne hai davvero bisogno. Se stavo iniziando un nuovo sistema e volevo assicurarmi di adattare correttamente i principi DDD e SOA, inizierei identificando i servizi per il mio dominio. Quindi, diciamo che hai 3 servizi, potresti iniziare dichiarando i contratti pubblici per ciascuno di questi servizi, non hai bisogno di nulla di speciale, puoi iniziare con l'API Web WCF/ASP.NET con un'API REST di sincronizzazione. Dovresti quindi assicurarti che ogni servizio ottenga il proprio database, perché stai puntando a un basso accoppiamento e potresti quindi creare di nuovo un livello API (quello visibile al mondo esterno) utilizzando nuovamente API Web WCF/ASP.NET, perché i tuoi microservizi non dovrebbero essere esposti direttamente al mondo esterno. Quindi a questo punto avresti una SOA simile, ma semplice nella progettazione, architettura, ma poiché avresti dei contratti ben definiti, potresti estendere i tuoi servizi aggiungendo loro delle capacità asincrone e per farlo inizieresti ad aggiungere una coda di messaggi a ciascuno dei servizi. Sai, non è necessario iniziare con un sistema complesso, iniziare con qualcosa di base, ben definito, che ti consente di ridimensionare se necessario.
Il sistema che ho descritto potrebbe essere esteso per supportare facilmente gli eventi se lo si desidera, e il fatto che a questo punto avresti già i messaggi di sincronizzazione non ti impedirà di aggiungere anche messaggi asyn al sistema.
Ma questi sono solo i miei due centesimi.