Devo passare da WCF a NserviceBus

13

Abbiamo un server centrale che invia e riceve messaggi da un numero di PC che si trovano su reti client in varie posizioni. Per facilitare questo, attualmente sto usando WCF con TCPNetBindings, usando la comunicazione duplex protetta con i certificati.

Ora abbiamo un numero di problemi con questo - principalmente che ci viene chiesto di supportare la "modalità disconnessa" (dobbiamo essere tolleranti ai guasti). Da quello che so, non c'è un modo semplice per farlo usando lo stack WCF - avremmo bisogno di implementare qualcosa e forse usare msmq. Ultimamente ho guardato su NServiceBus e da quello che vedo sembra che si adatti bene al disegno di legge - tolleranza ai guasti, i messaggi possono essere inviati su Internet tramite un semplice gateway http, ecc. So che è ben rispettato nella comunità, e Posso capire perché provarci.

Quindi, la mia domanda è ... L'uso di NServiceBus sembra un'idea sensata, o qualcuno ha altri suggerimenti / esperienze del mondo reale che si riferiscono a questo? Immagino di essere preoccupato di introdurre una nuova tecnologia di cui conosco relativamente poco e di affrontare problemi come assicurarla, impostare tutto in modo affidabile, trucchi lungo la strada .. Sono anche diffidente nei confronti di "gold- placcando "l'architettura, e scegliendo qualcosa di lucido che finirà per impantanarmi nell'implementazione contro l'attaccamento a WCF e semplicemente farlo funzionare per me ..

Grazie!

    
posta Matt Roberts 18.06.2012 - 15:33
fonte

2 risposte

12

Il mio suggerimento, se hai bisogno di essere veloce su questo e hai solo bisogno di qualcosa di semplice per facilitare l'operazione duratura (disconnessa) con WCF, è quello di esaminare i collegamenti WCF - MSMQ. Se hai bisogno di qualcosa in un ambiente più grande, guarda nServiceBus.

Nella mia mente, nServiceBus avrebbe davvero iniziato a brillare in un ambiente distribuito più ampio. Prendiamo, ad esempio, il seguente esempio (che sarebbe un inferno sulla terra con WCF ma semplice con nServiceBus):

  • Infrastruttura costituita da livello del server delle applicazioni, livello del server della cache, livello di sola lettura del database, livello del database di lettura / scrittura
  • Ogni volta che il client invia una nuova voce, ti piacerebbe davvero che tutti questi livelli venissero aggiornati immediatamente
  • In WCF, devi esporre servizi separati a ogni livello e farli spingere dal client a tutti (o disporre di un'orchestrazione centrale che faccia la stessa cosa per te)
  • In nServiceBus dovresti avere ogni livello iscritto a queste informazioni e il cliente lo pubblicherà una volta, consentendo al bus di servizio di occuparsi del resto

WCF ha associazioni MSMQ

Se è necessario attaccare principalmente con WCF, tuttavia (brevi timeline, sono necessarie altre funzionalità di WCF), ti suggerisco di controllare questo articolo su MSDN. Mostra come utilizzare i collegamenti WCF per MSMQ e quindi illustra come migrare un servizio da HTTP a MSMQ. Lungo il percorso ti mostra alcuni dei problemi con questo scenario (e le soluzioni utili a questi problemi).

Entrambi questi suggerimenti fanno un uso pesante di MSMQ, quindi una nota a riguardo: a differenza di Apache MQ, RabbitMQ e altri sistemi di accodamento popolari, MSMQ non è una tipica architettura di coda basata su broker, è invece una coda distribuita. Ciò significa che se il tuo client WCF invia un messaggio su un trasporto MSMQ mentre non può connettersi al server remoto che ospita la coda, il computer client accoderà il messaggio in quella che viene chiamata localmente "Coda in uscita". Il messaggio rimarrà lì in modo sicuro fino al momento in cui il servizio MSMQ del client rileva che è possibile connettersi nuovamente al servizio MSMQ remoto. A quel punto il messaggio scorrerà dal client alla destinazione finale.

C'è almeno un avvertimento su quanto sopra: se il server remoto è offline troppo a lungo (controlla la documentazione per MSMQ) il client si arrenderà e sposterà il messaggio dalla coda in uscita alla coda di messaggi non recapitati. I messaggi trasferiti alla coda di messaggi non recapitati non possono essere reinviati automaticamente, devono essere ricostruiti.

Se hai bisogno di crittografia e non hai ActiveDirectory, su questo post di blog , Sergey Sorokin descrive i passaggi necessario crittografare la comunicazione di MSMQ utilizzando WCF senza Active Directory.

    
risposta data 18.07.2012 - 18:50
fonte
7

Non sono una sostituzione 1 per 1 - molte volte utilizzerai NServiceBus per inviare messaggi o ricevere messaggi da un endpoint WCF.

In ogni caso, la gestione di scenari in modalità disconnessa come questa è dove le code dei messaggi davvero, davvero brillano. NServiceBus è un buon punto di partenza. Ci sono un certo numero di altre opzioni là fuori. Noterò che molti di loro in realtà eseguono il wrapping di MSMQ alla fine della giornata - MSMQ è un back-end molto solido e probabilmente vale la pena utilizzarlo quando è reso accessibile.

    
risposta data 18.06.2012 - 16:06
fonte

Leggi altre domande sui tag