NServiceBus contro MassTransit


86

Sto lottando con un elenco di pro e contro per quanto riguarda NServiceBus e MassTransit.

Ora so che c'è già un thread qui, ma non risponde davvero alle mie domande.

Ecco cosa ho letto finora:

  1. NServiceBus, sì, è concesso in licenza e non è gratuito.
  2. MassTransit, sì, è open source, ma la documentazione sembra mancare un po '.

NServiceBus è più vecchio e ha più riferimenti. È difficile trovare cose su MassTransit, ma ho una mentalità aperta. Tuttavia devo fornire una soluzione solida e quindi devo chiedere.

Quindi, per favore, qualcuno con esperienza con entrambi i framework. Perché dovrei scegliere NServiceBus? O Perché dovrei scegliere MassTransit?

È prestazioni, sicurezza, scalabilità o?

Risposte:


103

Se dovessi riassumere, ecco cosa direi:

Se hai bisogno di supporto commerciale, scegli NServiceBus. Se hai dimestichezza con l'utilizzo dei forum come mezzo di supporto, MassTransit è un'ottima opzione. Finora gli sviluppatori sono stati molto reattivi ai nostri problemi. Se scegli MassTransit, ora scegli tra MSMQ e RabbitMQ. Se hai bisogno di DTC vai con MSMQ. Se vuoi più funzionalità e una migliore amministrazione, vai con RabbitMQ.

Nel nostro progetto, siamo passati da NServiceBus a MassTransit per due motivi:

  1. MassTransit è gratuito
  2. Adoriamo RabbitMQ

Ho usato entrambi i framework. Ho utilizzato MassTransit più a lungo di NServiceBus. Ecco i punti salienti come li vedo io.

Costo:

  • MassTransit è concesso in licenza Apache 2.0 e gratuito per l'uso di produzione commerciale, mentre NServiceBus non lo è.

Supporto:

  • Come accennato da Udi, esiste un'opzione per il supporto NServiceBus commerciale, non l'ho visto per MassTransit.

Trasporto:

  • MassTransit supporta MSMQ e RabbitMQ
  • NServiceBus supporta solo MSMQ RabbitMQ è supportato in NServiceBus 4+

RabbitMQ vs MSMQ:

  • MSMQ supporta DTC (Distributed Transaction Coordinator) per transazioni che coinvolgono più processi su potenzialmente più macchine (es. SQL server, servizio Windows)
  • RabbitMQ ha un'eccellente interfaccia di amministrazione
  • MSMQ esiste da più tempo ed è un prodotto Microsoft
  • RabbitMQ è più recente, open source, gratuito e sponsorizzato da VMWare
  • MSMQ è installato sulla maggior parte delle macchine Windows per impostazione predefinita

Udi Dahan e i ragazzi di MassTransit (Chris Patterson, Dru Sellers e Travis Smith) sono tutte persone brillanti.


8
Ottima risposta, Clay. Permettetemi di aggiungere che nella prossima versione (che uscirà tra un paio di settimane) NServiceBus supporterà anche ActiveMQ. Abbiamo intenzionalmente ritardato il nostro supporto a RabbitMQ fino a quando non avremmo potuto fornire una solida storia di deduplicazione per compensare la mancanza di DTC, che è pianificato per il prossimo anno. MassTransit non esegue questa deduplicazione (ma potrebbe essere anche sulla loro roadmap, non lo so).
Udi Dahan

1
Buono a sapersi. La mancanza di transazioni end-to-end reali sarebbe un problema per i sistemi mission-critical.
Clay

Abbiamo impostato un sistema utilizzando nServiceBus e ci piace molto la reattività della community e nel complesso è abbastanza facile da configurare. Per ora usiamo MSMQ poiché è un terreno più comune. Tuttavia, anche se nServiceBus ha molti modelli di licenza, sono ancora abbastanza confuso su quale licenza dovrei (o il nostro team) dovrei acquistare per essere d'accordo con i termini di utilizzo. Il team conta circa 5 persone, ciascuna programmerà contro l'API, ma più in modalità POC (sì in produzione :)) per ora. MassTransit è prossimo alla revisione. Sembra abbastanza ben documentato.
Guillaume Schuermans

MassTransit non ha supporto commerciale né nessuno di noi ha intenzione di offrirlo, in questo momento. Suggerirei la mailing list per il supporto di MassTransit, ma nel mio lettore RSS sono presenti elementi contrassegnati da MassTransit, quindi normalmente rispondo entro un giorno o due su SO.
Travis

Per MT, puoi anche andare a una conversazione di Gitter: gitter.im/MassTransit/MassTransit
CrusherJoe

39

Come autore originale di NServiceBus, probabilmente sono un po 'di parte nei confronti della mia tecnologia, ma cercherò di mantenerlo il più equilibrato possibile.

Supporto per il trasporto

Sia NServiceBus che MassTransit supportano RabbitMQ e Azure Service Bus , ma NServiceBus supporta anche:

Sul tema di RabbitMQ

Si potrebbe sostenere che NServiceBus ha un supporto più forte per RabbitMQ, ad esempio nella sua funzionalità di consegna ritardata mentre Mass Transit afferma che il loro "plug-in è ancora considerato sperimentale. È supportato da MassTransit, ma non possiamo garantire nient'altro che il plug-in si garantisce. "

Lavoriamo anche a stretto contatto con il team RabbitMQ, contribuendo a .net SDK a vantaggio dell'intero ecosistema.

Quando si tratta di Azure Service Bus

Il livello di collaborazione che abbiamo con il team del bus di servizio di Azure è ancora più alto, con oltre 70 PR nel loro SDK .net core .

Quando si utilizza NServiceBus, si beneficia di tutta la profondità di tale conoscenza.

Strumenti

Questa è la differenza più grande.

Una volta che hai costruito un sistema sostanziale, avere visibilità su come tutte le diverse parti in movimento parlano tra loro diventa davvero importante. MassTransit non ha molto in quest'area oltre a una piccola integrazione tramite un'origine diagnostica con strumenti di terze parti come Application Insights o Open Trace.

La piattaforma di servizi attorno a NServiceBus va un po 'più in là, dandoti la possibilità di vedere i diagrammi di sequenza su tutti gli endpoint con ServiceInsight :

Diagrammi di sequenza con ServiceInsight

Puoi anche ottenere la visualizzazione logica di tutti i tuoi endpoint e messaggi:

La vista logica di un sistema NServiceBus

In sostanza, ottieni una documentazione vivente dell'architettura del tuo sistema.

Gestione e monitoraggio

Questa è un'altra area in cui MassTransit non ha molto. Quando un sistema di terze parti con cui ti stai integrando diventa non disponibile e un gruppo di messaggi nel tuo sistema finisce nella coda degli errori, l'unica soluzione che MassTransit ha per te per spostare manualmente quei messaggi in un secondo momento utilizzando il plug-in RabbitMQ Shovel .

La piattaforma di servizi intorno a NServiceBus include il monitoraggio di quella coda di errore, strumenti grafici per vedere quali erano le cause di quegli errori, nonché la possibilità di riprodurre gruppi di quei messaggi non riusciti e vedere che sono stati effettivamente elaborati con successo tutto in una semplice app web chiamato ServicePulse .

Raggruppamento dei messaggi non riuscito con ServicePulse

C'è anche la visualizzazione di controlli di integrità che vengono eseguiti periodicamente che possono fornire avvisi precoci di problemi prima che i messaggi inizino a non funzionare.

E infine, c'è il monitoraggio delle prestazioni disponibile nella piattaforma:

Monitoraggio delle prestazioni di NServiceBus

Ottieni davvero il pacchetto completo quando si tratta di supporto alla produzione.

Supporto a lungo termine e compatibilità con le versioni precedenti

Mentre le persone di Mass Transit sono sempre state estremamente brave nell'aiutare chiunque abbia domande al riguardo su Gitter o sul loro gruppo Google , non credo che forniscano correzioni di bug sulle versioni precedenti. Quando i tuoi sistemi di produzione sono in circolazione da un paio d'anni e non puoi semplicemente aggiornare tutto tutto il tempo, inizia a essere importante.

Con NServiceBus il supporto include :

  • 2+ anni per ogni versione principale
  • Altri 2 anni di supporto esteso
  • Tempi di risposta garantiti sulle criticità
  • Disponibilità 24x7

Consulenza e formazione

Da una prospettiva offline, ci sono corsi pubblici disponibili in tutto il mondo su NServiceBus così come molti consulenti che possono essere portati in loco per avviare un progetto o per assistere in caso di problemi. Ho sentito da diverse aziende che hanno deciso di passare da MassTransit a NServiceBus perché non potevano ottenere qualcuno sul posto quando ne avevano bisogno.

Licenze

Ciò che alcune persone ancora non sanno di NServiceBus è che è GRATUITO per uso personale e startup .

GRATIS per uso personale e startup

Quando si tratta di uso commerciale , i modelli di licenza intorno a NServiceBus sono molto flessibili, come indica l'ampio spettro di clienti, e possono essere ben giustificati dalla direzione. Ovviamente, con MassTransit, la licenza è gratuita.

Spero che questo aiuti in qualche modo.


6
Mi piacerebbe sentire cosa hai da dire su MassTransit in modo imparziale. Cercando di "difendere" l'implementazione di MassTransit in un modo. Tuttavia, mi piace molto nServiceBus, stiamo solo lottando con il costo della licenza provandolo in un ambiente di produzione reale ma solo per le nuove funzionalità aggiunte nella nostra piattaforma. La prova del codice concettuale che potresti dire.
Guillaume Schuermans

1
E le differenze più tecniche? Che dire dell'affidabilità, della deduplicazione, dell'invio di messaggi di grandi dimensioni, ecc. Come si confrontano questi framework / forme di gioco? Esiste un elenco che confronta diversi bus di messaggistica in questo modo?
Steven

1
Per quanto ne so, @Steven, MassTransit non ha la funzionalità di deduplicazione che si trova nella funzione Posta in uscita di NServiceBus. Parte del problema nel fornire il tipo di elenco desiderato è che ciascuna di queste tecnologie continua ad evolversi, il che renderebbe obsoleto qualsiasi elenco di quel tipo.
Udi Dahan

@udidahan, probabilmente dovresti aggiornare la tua visione poiché ci avviciniamo al 2021. Voglio sapere se la MT ha migliorato in qualche modo la sua tecnologia di base negli ultimi anni, così come NServiceBus
Volkan Güven

Sì, Volkan. Sia MassTransit che NServiceBus hanno continuato a evolversi nel tempo.
Udi Dahan

8

So che è tardi per intervenire su questa domanda, ma per amor di bingleability, devo menzionare Rebus (di cui mi capita di essere l'autore principale).

Rebus ha circa 8 anni ora ed è stato utilizzato per spostare denaro e controllare le centrali elettriche sin dall'inizio.

Supporta la maggior parte dei sistemi di accodamento di base, come MSMQ, RabbitMQ, Azure Service Bus, Azure Storage Queues, Amazon SQS, ecc., Ma supporta anche cose più divertenti come l'utilizzo di MSSQL, PostgreSQL e Oracle come trasporti.

Il wiki della documentazione è abbastanza completo, anche se molte persone sembrano cavarsela, perché le API di Rebus sono così facilmente individuabili.

Rebus è sempre stato (e sarà sempre) completamente gratuito. È concesso in licenza dal MIT, quindi puoi praticamente farne quello che ti senti.

Se finisci per diventare un utente Rebus serio e hai bisogno di un contratto di supporto formale e di strumenti aggiuntivi, puoi iscriverti a Rebus Pro , che è offerto da Rebus FM (la società dietro Rebus).

La "strumentazione extra" di cui sopra attualmente si presenta sotto forma di Fleet Manager , che può aiutare con le cose. Ad esempio, Fleet Manager sostituisce completamente le code di errore , quindi i messaggi non riusciti vengono archiviati lì. Ciò significa che i messaggi non riusciti possono essere visualizzati, gestiti e riprovati in qualsiasi momento con pochi clic in Fleet Manager.


2
Rebus è decisamente sottovalutato. È un vero gioiello leggero nell'ecosistema .NET.
ThomasDC

4

Puoi sempre usare Shuttle (FOSS): https://github.com/Shuttle/shuttle-esb :)

Documentazione (in continuo miglioramento): http://shuttle.github.io/shuttle-esb/

Il progetto Shuttle dura da quasi 2 anni e utilizza sistemi di produzione. Sarà questione di scegliere ciò che risuona con te.

NServiceBus ha un buon track record. L'ho usato in precedenza su un sistema di produzione (1.9) ma non da quando è diventato commerciale (il punto in cui ho iniziato con Shuttle).

Non ho provato MassTransit.

Immagino che tutte le tue opzioni avranno le basi (comando / evento / pub-sub). Tuttavia, NServiceBus ha saghe e roba del bus di dati, anche se ritengo sia abbastanza facile gestire i dati al di fuori del bus di servizio stesso, come nei gestori di messaggi dell'endpoint. Non so se MassTransit abbia saghe / bus dati, ma Shuttle certamente no.

Un'altra considerazione è probabilmente come intendi utilizzare l'autobus di servizio. Se deve essere parte di un prodotto, per un'opzione commerciale come NServiceBus dovresti considerare le implicazioni in termini di costi per gli utenti del tuo prodotto e sebbene sia ancora qualcosa che deve essere considerato per lo sviluppo interno, può certamente essere giustificato.



2

Giusto per dare una risposta più aggiornata, ho sviluppato professionalmente con entrambi gli ecosistemi ed entrambi ora supportano un'ampia gamma di tecnologie MQ e .NET Core.

Ho utilizzato NServicebus alcuni anni fa su un nuovo prodotto cloud, avevamo bisogno di .NET Core che Mass Transit non supportava al momento. Devo dire che è una cosa adorabile da usare come sviluppatore, ci sono molte linee carine, ottimi strumenti / monitoraggio e la documentazione è davvero buona.

Sono disponibili vari livelli di supporto e licenza e, in un'occasione, abbiamo avuto bisogno di aiuto, era di buona qualità.


Uso Mass Transit da alcuni mesi in una nuova azienda e preferiscono di gran lunga avere una libreria open source gratuita. Il viaggio è stato un po 'più difficile: la documentazione per MT è carente in alcuni punti e molti esempi / problemi non sono aggiornati. Non c'è nemmeno la gamma di funzionalità avanzate, ma potresti non averne bisogno per il loro caso d'uso.

Funziona bene, tuttavia, e gli sviluppatori di MT sembrano impegnarsi MOLTO per supportare il loro OSS, ben oltre ciò che ci si potrebbe ragionevolmente aspettare.

Quindi, personalmente, il mio TLDR sarebbe: ottieni NServicebus se la tua azienda può essere convinta a pagare per questo, ma MT è un'alternativa utile e il meglio che puoi ottenere gratuitamente.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.