104 votes

NServiceBus vs MassTransit

J'ai du mal à dresser une liste des avantages et des inconvénients de NServiceBus et de MassTransit.

Je sais qu'il y a déjà un fil ici, mais il ne répond pas vraiment à mes questions.

Voici ce que j'ai lu jusqu'à présent :

  1. NServiceBus, oui, il est sous licence et il n'est pas gratuit.
  2. MassTransit, oui c'est open source, mais la documentation semble manquer quelque peu.

NServiceBus est plus ancien et comporte plus de références. Il est difficile de trouver des informations sur MassTransit, mais je suis ouvert d'esprit. Cependant, je dois fournir une solution solide, et donc je dois demander.

Alors s'il vous plaît, quelqu'un ayant de l'expérience avec les deux frameworks. Pourquoi devrais-je choisir NServiceBus ? OU Pourquoi devrais-je choisir MassTransit ?

S'agit-il de performances, de sécurité, d'échelle ou ?

118voto

Clay Points 1060

Si je devais résumer, voici ce que je dirais :

Si vous avez besoin d'une assistance commerciale, optez pour NServiceBus. Si vous êtes à l'aise avec l'utilisation de forums comme moyen d'assistance, MassTransit est une excellente option. Les développeurs ont été très réactifs à nos problèmes jusqu'à présent. Si vous choisissez MassTransit, vous devez maintenant choisir entre MSMQ et RabbitMQ. Si vous avez besoin de DTC, choisissez MSMQ. Si vous voulez plus de fonctionnalités et une meilleure administration, choisissez RabbitMQ.

Sur notre projet, nous sommes passés de NServiceBus à MassTransit pour deux raisons :

  1. MassTransit est gratuit
  2. Nous aimons RabbitMQ

J'ai utilisé les deux frameworks. J'ai utilisé MassTransit plus longtemps que NServiceBus. Voici les points forts tels que je les vois.

Coût :

  • MassTransit est sous licence Apache 2.0 et libre pour une utilisation commerciale de production, alors que NServiceBus ne l'est pas.

Soutien :

  • Comme Udi l'a mentionné, il existe une option pour le support commercial de NServiceBus, je n'ai pas vu cela pour MassTransit.

Transport :

  • MassTransit prend en charge MSMQ et RabbitMQ
  • NServiceBus ne prend en charge que MSMQ RabbitMQ est supporté par NServiceBus 4+.

RabbitMQ contre MSMQ :

  • MSMQ supporte le DTC (coordinateur de transactions distribuées) pour les transactions impliquant plusieurs processus sur des machines potentiellement multiples (par exemple, serveur SQL, service Windows).
  • RabbitMQ dispose d'un excellent Interface d'administration
  • MSMQ existe depuis plus longtemps et est un produit Microsoft.
  • RabbitMQ est plus récent, open source, gratuit et sponsorisé par VMWare.
  • MSMQ est installé par défaut sur la plupart des machines Windows.

Udi Dahan et les gars de MassTransit (Chris Patterson, Dru Sellers et Travis Smith) sont tous des gens brillants.

9 votes

Bonne réponse, Clay. Permettez-moi d'ajouter que dans la prochaine version (qui sortira dans quelques semaines), NServiceBus supportera également ActiveMQ. Nous avons intentionnellement retardé notre support pour RabbitMQ jusqu'à ce que nous puissions fournir une histoire de déduplication robuste pour compenser le manque de DTC - c'est prévu pour l'année prochaine. MassTransit ne fait pas cette déduplication (mais cela pourrait être sur leur feuille de route aussi, je ne sais pas).

1 votes

Heureux de l'entendre. L'absence de véritables transactions de bout en bout serait un obstacle pour les systèmes critiques.

0 votes

Nous avons mis en place un système utilisant nServiceBus et nous aimons vraiment la réactivité de la communauté et dans l'ensemble il est assez facile à configurer. Nous utilisons MSMQ pour l'instant car il est plus courant. Cependant, même si nServiceBus propose plusieurs modèles de licence, je ne sais toujours pas quelle licence je devrais (ou notre équipe devrait) acheter pour être en accord avec les conditions d'utilisation. L'équipe compte environ 5 personnes, chacune d'entre elles va programmer avec l'API, mais plutôt en mode POC (oui en production :)) pour le moment. MassTransit est le prochain à être examiné. Il semble assez bien documenté.

71voto

Udi Dahan Points 8429

En tant qu'auteur original de NServiceBus, je suis probablement un peu partial à l'égard de ma propre technologie, mais je vais essayer de rester aussi équilibré que possible.

Soutien au transport

NServiceBus et MassTransit supportent tous deux RabbitMQ y Azure Service Bus mais NServiceBus prend également en charge :

Au sujet de RabbitMQ

On pourrait arguer que NServiceBus dispose d'une meilleure prise en charge de RabbitMQ - par exemple, dans sa fonction la fonctionnalité de livraison différée tandis que Mass Transit États que leur "plugin est toujours considéré comme expérimental. Il est supporté par MassTransit, mais nous ne pouvons rien garantir de plus que ce que le plugin garantit lui-même."

Nous travaillons également en étroite collaboration avec l'équipe RabbitMQ, contribuer au SDK .net au profit de l'ensemble de l'écosystème.

Quand il s'agit d'Azure Service Bus

Le niveau de collaboration que nous avons avec l'équipe d'Azure Service Bus est encore plus élevé, avec plus de 70 PRs pour leur SDK .net core .

Lorsque vous utilisez NServiceBus, vous bénéficiez de toute la profondeur de ces connaissances.

Outillage

C'est la plus grande différence.

Une fois que vous avez construit un système substantiel, il devient très important d'avoir une visibilité sur la façon dont les différentes parties mobiles communiquent entre elles. MassTransit n'a pas grand-chose dans ce domaine, si ce n'est une petite intégration par le biais d'un système de gestion de la qualité. Source de diagnostic à des outils tiers comme Application Insights ou Open Trace.

La plate-forme de service autour de NServiceBus va un peu plus loin, en vous donnant la possibilité de voir les diagrammes de séquence sur tous les points de terminaison avec ServiceInsight :

Sequence diagrams with ServiceInsight

Vous pouvez également obtenir une vue logique de tous vos points de terminaison et messages :

The logical view of an NServiceBus system

En substance, vous obtenez une documentation vivante de l'architecture de votre système.

Gestion et suivi

C'est un autre domaine où MassTransit n'a pas grand-chose. Lorsqu'un système tiers avec lequel vous vous intégrez devient indisponible et qu'un grand nombre de messages de votre système se retrouvent dans la file d'attente des erreurs, la seule solution dont dispose MassTransit est de déplacer manuellement ces messages ultérieurement à l'aide de l'outil de gestion des messages. Plugin RabbitMQ Shovel .

La plateforme de service autour de NServiceBus inclut la surveillance de cette file d'attente d'erreurs, des outils graphiques pour voir quelles étaient les causes de ces erreurs, ainsi que la possibilité de rejouer des groupes de ces messages échoués et de les envoyer à d'autres utilisateurs. voir qu'ils ont effectivement été traités avec succès le tout dans une simple application web appelée ServicePulse .

Failed message grouping with ServicePulse

Il existe également une visualisation des contrôles de santé qui sont exécutés périodiquement et qui peuvent fournir des alertes précoces de problèmes avant que les messages ne commencent à tomber en panne.

Et enfin, il y a le suivi des performances disponibles sur la plate-forme :

NServiceBus performance monitoring

Vous bénéficiez vraiment d'une offre complète en matière de soutien à la production.

Soutien à long terme et rétrocompatibilité

Alors que les gens de Mass Transit ont toujours été très bons pour aider ceux qui ont des questions à ce sujet sur le site web de l'entreprise. Gitter ou leur Groupe Google Je ne pense pas qu'ils fournissent des corrections de bogues sur les anciennes versions. Lorsque vos systèmes de production existent depuis quelques années et que vous ne pouvez pas tout mettre à jour en permanence, cela devient important.

Avec NServiceBus Le soutien comprend :

  • 2+ ans pour chaque version majeure
  • Deux années supplémentaires de support étendu
  • Temps de réponse garantis sur les questions critiques
  • Disponibilité 24x7

Conseil et formation

D'un point de vue hors ligne, il existe des cours publics disponibles dans le monde entier sur NServiceBus ainsi que de nombreux consultants qui peuvent être amenés sur place pour lancer un projet ou pour aider en cas de problème. J'ai entendu parler de plusieurs entreprises qui ont décidé de passer de MassTransit à NServiceBus parce qu'elles ne pouvaient pas trouver quelqu'un sur place quand elles en avaient besoin.

Licences

Ce que certaines personnes ignorent encore à propos de NServiceBus, c'est qu'il est GRATUIT pour l'utilisation personnelle et les startups .

FREE for personal use and startups

Lorsqu'il s'agit de utilisation commerciale Les modèles de licence autour de NServiceBus sont très flexibles, comme l'indique le large éventail de clients, et peuvent être bien justifiés auprès de la direction. Bien sûr, avec MassTransit, la licence est gratuite.

J'espère que cela vous aidera d'une manière ou d'une autre.

9 votes

J'aimerais entendre ce que vous avez à dire sur MassTransit de manière impartiale. J'essaie de "défendre" l'implémentation de MassTransit en quelque sorte. J'aime beaucoup nServiceBus, mais nous nous battons avec le coût de la licence pour l'essayer dans un environnement de production réel, mais seulement pour les nouvelles fonctionnalités de notre plate-forme. Le code de preuve de concept, pourrait-on dire.

1 votes

Qu'en est-il des différences plus techniques ? Qu'en est-il de la fiabilité, de la déduplication, de l'envoi de gros messages, etc. Comment ces cadres/formes de jeu se comparent-ils ? Existe-t-il une liste qui compare plusieurs bus de messagerie de cette manière ?

1 votes

Pour autant que je sache, @Steven, MassTransit ne dispose pas de la fonctionnalité de déduplication que l'on trouve dans la fonction Outbox de NServiceBus. Une partie du problème pour fournir le type de liste que vous souhaitez est que chacune de ces technologies continue à évoluer, ce qui rendrait toute liste de ce type obsolète.

13voto

mookid8000 Points 8519

Je sais qu'il est tard pour répondre à cette question, mais pour le bien de la bingle, je dois mentionner que Rebus (dont je suis l'auteur principal).

Rebus a environ 8 ans maintenant, et il a été utilisé pour déplacer de l'argent et contrôler des centrales électriques depuis le début.

Il prend en charge la plupart des systèmes de mise en file d'attente de base, comme MSMQ, RabbitMQ, Azure Service Bus, Azure Storage Queues, Amazon SQS, etc., mais il prend également en charge des fonctionnalités plus originales, comme l'utilisation de MSSQL, PostgreSQL et Oracle comme transports.

Le wiki de documentation est assez complet, bien que de nombreuses personnes semblent s'en sortir, car les API de Rebus sont si faciles à découvrir.

Rebus a toujours été (et sera toujours) entièrement gratuit. Il est sous licence MIT, vous pouvez donc en faire ce que vous voulez.

Si vous devenez un utilisateur sérieux de Rebus et que vous avez besoin d'un accord de support formel et d'outils supplémentaires, vous pouvez vous abonner à Rebus Pro qui est offert par Rebus FM (la société derrière Rebus).

L'"outillage supplémentaire" mentionné ci-dessus se présente actuellement sous la forme de Directeur de la flotte qui peuvent vous aider. Par exemple, Fleet Manager remplace complètement les files d'attente d'erreurs Les messages échoués sont donc stockés à cet endroit. Cela signifie que les messages ayant échoué peuvent être consultés, gérés et réessayés à tout moment en quelques clics dans Fleet Manager.

13voto

Phil S Points 308

Pour donner une réponse plus actuelle, j'ai développé professionnellement avec les deux écosystèmes et ils supportent maintenant tous les deux une large gamme de technologies MQ et .NET Core.

J'ai utilisé NServicebus il y a quelques années pour un nouveau produit en nuage. Nous avions besoin de .NET Core, que Mass Transit ne prenait pas en charge à l'époque. Je dois dire que c'est un outil très agréable à utiliser en tant que développeur, il y a beaucoup de jolis one liners, d'excellents outils/suivi et la documentation est vraiment bonne.

Différents niveaux d'assistance et de licence sont disponibles, et lorsque nous avons eu besoin d'aide, celle-ci était de bonne qualité.


J'utilise Mass Transit depuis quelques mois dans une nouvelle entreprise, et ils préfèrent de loin avoir une bibliothèque gratuite et open-source. Le voyage a été un peu plus difficile - la documentation de MT est insuffisante par endroits, et beaucoup d'exemples/problèmes sont dépassés. Il n'y a pas non plus toute la gamme de fonctionnalités avancées, mais vous n'en avez peut-être pas besoin pour leur cas d'utilisation.

Mais il fonctionne bien, et les développeurs de MT semblent consacrer beaucoup d'efforts au support de leur logiciel libre, bien au-delà de ce que l'on peut raisonnablement attendre.

Donc personnellement, mon TLDR serait - prenez NServicebus si votre entreprise peut être convaincue de payer pour cela, mais MT est une alternative utilisable et le meilleur que vous pouvez obtenir gratuitement.

5voto

Eben Roux Points 5211

Vous pouvez toujours utiliser Shuttle (FOSS) : https://github.com/Shuttle/shuttle-esb :)

Documentation (en constante amélioration) : http://shuttle.github.io/shuttle-esb/

Le projet Shuttle dure depuis presque 2 ans et est utilisé comme système de production. Il s'agira de choisir ce qui résonne avec vous.

NServiceBus a de bons antécédents. Je l'ai déjà utilisé sur un système de production (1.9) mais pas depuis qu'il est commercialisé (le moment où j'ai commencé avec Shuttle).

Je n'ai pas essayé MassTransit.

Je suppose que toutes vos options auront les bases (commande / événement / pub-sub). Cependant, NServiceBus dispose de sagas et de bus de données, même si je pense qu'il est assez facile de gérer les données en dehors du bus de service lui-même, par exemple dans les gestionnaires de messages des points de terminaison. Je ne sais pas si MassTransit a des sagas/bus de données mais Shuttle n'en a certainement pas.

Une autre considération est probablement la façon dont vous comptez utiliser le bus de service. S'il doit faire partie d'un produit, alors pour une option commerciale telle que NServiceBus, vous devrez considérer les implications en termes de coûts pour les utilisateurs de votre produit et, bien que ce soit toujours quelque chose à considérer pour le développement interne, il peut certainement être justifié.

9 votes

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X