Potrebbe esserci confusione tra Messaggistica affidabile, Bus di servizio e Pub-Sub. Non è troppo raro in quanto spesso vengono discussi insieme e devo ancora trovare una buona definizione per un bus di servizio.
Innanzitutto, iniziamo con quello che sembra essere il motivatore della tua situazione: problemi di connettività.
Nei casi in cui l'affidabilità della connessione non è buona, ma hai bisogno di comunicazioni affidabili al 100% (e sei disposto a sacrificare le comunicazioni sincrone) puoi ricorrere all'uso delle tecnologie Reliable Messaging. Alcuni che ho esaminato sono MSMQ e RabbitMQ.
Quando pubblichi semplicemente messaggi e non ti interessa una risposta, allora questo tipo di comunicazione asincrona è utile.
Secondo, la tua domanda sulla query. Sebbene il bus di servizio possa utilizzare protocolli affidabili, questo non è il principale vantaggio del bus di servizio. Potrei sbagliarmi qui, perché ho trovato molte definizioni contrastanti di ciò che SB è, ma la mia comprensione è la seguente:
Un bus di servizio è un sistema middleware che funge da livello di astrazione per le comunicazioni tra sistemi. Invece del System A che sa di System B e dei suoi protocolli di comunicazione, tutto quello che il Sistema A deve sapere è il Service Bus.
Il tuo bus di servizio dovrebbe esporre tutti i tuoi servizi di sistema in modo facile da usare e di sistema gnostico . Ciò garantisce accoppiamento lento tra i sistemi nella tua rete.
Detto questo, il tuo bus di servizio dovrebbe essere in grado di offrirti comunicazioni sincrone. Pertanto, la tua chiamata a GetAccountInformation()
sarebbe solo una normale query del servizio web.
Infine, non posso prometterti se questo è un modo consigliato di fare le cose, ma nel mio ultimo posto di lavoro abbiamo combinato Reliable Message, Service Buses e Pub-Sub nel seguente modo:
- Avevamo un bus di servizio che fungeva da livello di astrazione attorno a molti dei nostri servizi web di sistema.
- Il bus di servizio esponeva anche un servizio di messaggistica.
- Ogni volta che un'applicazione deve pubblicare un messaggio nel mondo, lo fa chiamando il servizio di messaggistica del bus di servizio.
- Poiché era assolutamente essenziale che nessuno di questi messaggi si perdesse, la comunicazione con il servizio di messaggistica era stata effettuata utilizzando una coda di messaggistica affidabile.
- Il nostro bus di servizio era a conoscenza di tutte le sottoscrizioni di messaggi (argomento) e ha notificato doverosamente tutti i sistemi a valle (di nuovo, utilizzando una coda di messaggi attendibili)
Speriamo che questo aiuti ... anche se non posso garantire che non l'abbiamo fatto completamente indietro!