Come si consegnano messaggi a (e si interroga da) siti con possibilmente cattiva connettività, con numerosi servizi WCF di sapone e Web API?

2

La mia azienda sta studiando utilizzando un bus di servizio. Attualmente disponiamo di prototipi di NServiceBus e Microsoft Service Bus (in sede).

Sono abbastanza soddisfatto delle funzionalità di messaggistica di sottofondo e di argomento fornite dal bus, ma mi sto perdendo in uno dei requisiti a cui si riferiscono.

Ad esempio: desiderano interrogare il bus di servizio e "GetAccountInformation ()" e aspettano uno stile di servizio WCF di ritorno dei risultati e si aspettano che il bus risponda a sufficienza per visualizzare il risultato in un'interfaccia utente.

Ora, con quanto sopra ho menzionato quanto segue:

  1. Non è possibile utilizzare il bus per l'esecuzione di query poiché il pattern ereditario implica una "latenza elevata", in quanto non è possibile garantire che tutti gli utenti siano in ascolto in quel punto.
  2. Sembra che vogliano utilizzare il bus come "hub" per tutte le comunicazioni. A me sembra che abbiano bisogno dei relè WCF.

Per complicare le cose, il motivo per cui ci stanno guardando, dobbiamo essere in grado di inviare messaggi a (e interrogare da) siti geograficamente dispersi, alcuni dei quali hanno problemi di connettività orribili. Quindi, per questo caso la messaggistica si adatta.

Inoltre, tutti i diversi siti hanno numerosi servizi WCF di sapone e Web API.

Come ottenere questo?

    
posta Ruaan Kruger 24.04.2014 - 20:30
fonte

1 risposta

2

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!

    
risposta data 24.04.2014 - 21:22
fonte

Leggi altre domande sui tag