NServiceBus frente a MassTransit


85

Estoy luchando con una lista de pros y contras con respecto a NServiceBus y MassTransit.

Ahora sé que ya hay un hilo aquí, pero realmente no responde a mis preguntas.

Esto es lo que he leído hasta ahora:

  1. NServiceBus, sí, tiene licencia y no es gratis.
  2. MassTransit, sí, es de código abierto, pero la documentación parece faltar algo.

NServiceBus es más antiguo y tiene más referencias. Es difícil encontrar cosas sobre MassTransit, pero soy de mente abierta. Sin embargo, tengo que ofrecer una solución sólida, por lo que tengo que preguntar.

Así que, por favor, alguien con experiencia con ambos marcos. ¿Por qué debería elegir NServiceBus? O ¿Por qué debería elegir MassTransit?

¿Es rendimiento, seguridad, escala o?

Respuestas:


102

Si tuviera que resumir, esto es lo que diría:

Si necesita soporte comercial, elija NServiceBus. Si se siente cómodo con el uso de foros como medio de apoyo, MassTransit es una excelente opción. Los desarrolladores han respondido muy bien a nuestros problemas hasta ahora. Si elige MassTransit, ahora elegirá entre MSMQ y RabbitMQ. Si necesita DTC, vaya con MSMQ. Si desea más funciones y una mejor administración, elija RabbitMQ.

En nuestro proyecto, cambiamos de NServiceBus a MassTransit por dos razones:

  1. MassTransit es gratis
  2. Nos encanta RabbitMQ

He usado ambos marcos. He usado MassTransit por más tiempo que NServiceBus. Aquí están los aspectos más destacados como yo los veo.

Costo:

  • MassTransit tiene licencia de Apache 2.0 y es gratuito para uso de producción comercial, mientras que NServiceBus no.

Apoyo:

  • Como mencionó Udi, hay una opción para el soporte comercial de NServiceBus, no he visto eso para MassTransit.

Transporte:

  • MassTransit es compatible con MSMQ y RabbitMQ
  • NServiceBus solo admite MSMQ RabbitMQ es compatible con NServiceBus 4+

RabbitMQ frente a MSMQ:

  • MSMQ admite DTC (coordinador de transacciones distribuidas) para transacciones que involucran múltiples procesos en potencialmente múltiples máquinas (por ejemplo, servidor SQL, servicio de Windows)
  • RabbitMQ tiene una excelente interfaz de administración
  • MSMQ ha existido por más tiempo y es un producto de Microsoft
  • RabbitMQ es más nuevo, de código abierto, gratuito y patrocinado por VMWare
  • MSMQ está instalado en la mayoría de las máquinas con Windows de forma predeterminada

Udi Dahan y los chicos de MassTransit (Chris Patterson, Dru Sellers y Travis Smith) son personas brillantes.


8
Buena respuesta, Clay. Permítanme agregar que en la próxima versión (que saldrá en un par de semanas) NServiceBus también será compatible con ActiveMQ. Hemos estado retrasando intencionalmente nuestro soporte para RabbitMQ hasta que pudiéramos ofrecer una historia sólida de deduplicación para compensar la falta de DTC, eso está planeado para el próximo año. MassTransit no hace esta deduplicación (pero también podría estar en su hoja de ruta, no lo sé).
Udi Dahan

1
Me alegro de oirlo. La falta de transacciones verdaderas de un extremo a otro sería un factor decisivo para los sistemas de misión crítica.
Clay

Hemos configurado un sistema usando nServiceBus y realmente nos gusta la capacidad de respuesta de la comunidad y, en general, es bastante fácil de configurar. Usamos MSMQ por ahora ya que es un terreno más común. Sin embargo, aunque nServiceBus tiene muchos modelos de licencia, todavía estoy bastante confundido sobre qué licencia (o nuestro equipo) tendría que comprar para estar de acuerdo con los términos de uso. El equipo cuenta con aproximadamente 5 personas, cada una de ellas programará contra la API, pero más en modo POC (sí, en producción :)) por ahora. MassTransit es el próximo en revisión. Parece bastante bien documentado.
Guillaume Schuermans

MassTransit no cuenta con soporte comercial ni ninguno de nosotros tiene planes de ofrecerlo en este momento. Sugeriría la lista de correo para el soporte de MassTransit, pero tengo cosas etiquetadas de MassTransit en mi lector de RSS, por lo que normalmente respondo dentro de uno o dos días en SO.
Travis

Para MT, también puede ir a una conversación de Gitter: gitter.im/MassTransit/MassTransit
CrusherJoe

36

Como autor original de NServiceBus, probablemente estoy un poco inclinado hacia mi propia tecnología, pero intentaré mantener esto lo más equilibrado posible.

Soporte de transporte

Tanto NServiceBus como MassTransit son compatibles con RabbitMQ y Azure Service Bus , pero NServiceBus también admite:

Sobre el tema de RabbitMQ

Se podría argumentar que NServiceBus tiene un mayor soporte para RabbitMQ, por ejemplo, en su funcionalidad de entrega retrasada, mientras que Mass Transit afirma que su "complemento todavía se considera experimental. Es compatible con MassTransit, pero no podemos garantizar nada más que el complemento se garantiza a sí mismo ".

También trabajamos muy de cerca con el equipo de RabbitMQ, contribuyendo al .net SDK en beneficio de todo el ecosistema.

Cuando se trata de Azure Service Bus

El nivel de colaboración que tenemos con el equipo de Azure Service Bus es aún mayor, con más de 70 RP en su SDK principal de .net .

Cuando utiliza NServiceBus, se beneficia de la profundidad total de ese conocimiento.

Estampación

Ésta es la mayor diferencia.

Una vez que haya construido un sistema sustancial, tener visibilidad de cómo se comunican las diferentes partes móviles se vuelve realmente importante. MassTransit no tiene mucho en esta área más allá de una pequeña integración a través de una fuente de diagnóstico con herramientas de terceros como Application Insights o Open Trace.

La plataforma de servicio en torno a NServiceBus va un poco más allá y le brinda la capacidad de ver diagramas de secuencia en todos los puntos finales con ServiceInsight :

Diagramas de secuencia con ServiceInsight

También puede obtener la vista lógica de todos sus puntos finales y mensajes:

La vista lógica de un sistema NServiceBus

En esencia, obtiene documentación viva de la arquitectura de su sistema.

Gestión y seguimiento

Esta es otra área en la que MassTransit no tiene mucho. Cuando un sistema de terceros con el que se está integrando deja de estar disponible y un montón de mensajes en su sistema terminan en la cola de errores, la única solución que MassTransit tiene para que usted mueva manualmente esos mensajes más tarde utilizando el complemento RabbitMQ Shovel .

La plataforma de servicio alrededor de NServiceBus incluye el monitoreo de esa cola de errores, herramientas gráficas para ver cuáles fueron las causas de esos errores, así como la capacidad de reproducir grupos de esos mensajes fallidos y ver que en realidad se procesaron con éxito, todo en una aplicación web simple. llamado ServicePulse .

Agrupación de mensajes fallidos con ServicePulse

También hay una visualización de comprobaciones de estado que se ejecutan periódicamente y que pueden proporcionar advertencias tempranas de problemas antes de que los mensajes comiencen a fallar.

Y finalmente, está el monitoreo de rendimiento disponible en la plataforma:

Supervisión del rendimiento de NServiceBus

Realmente obtiene el paquete completo cuando se trata de soporte de producción.

Soporte a largo plazo y compatibilidad con versiones anteriores

Si bien la gente de Mass Transit siempre ha sido extremadamente buena para ayudar a cualquiera que tenga preguntas al respecto en Gitter o su Grupo de Google , no creo que proporcionen correcciones de errores en versiones anteriores. Cuando sus sistemas de producción han existido durante un par de años, y no puede simplemente actualizar todo todo el tiempo, eso comienza a ser importante.

Con NServiceBus, el soporte incluye :

  • Más de 2 años para cada versión principal
  • 2 años adicionales de soporte extendido
  • Tiempos de respuesta garantizados en problemas críticos
  • Disponibilidad 24x7

Consultoría y formación

Desde una perspectiva fuera de línea, hay cursos públicos disponibles en todo el mundo en NServiceBus, así como muchos consultores que se pueden llevar al sitio para iniciar un proyecto o ayudar en caso de problemas. Escuché de varias empresas que decidieron cambiar de MassTransit a NServiceBus porque no podían conseguir a alguien en el sitio cuando lo necesitaban.

Licencia

Lo que algunas personas aún no saben sobre NServiceBus es que es GRATIS para uso personal y para empresas emergentes .

GRATIS para uso personal y startups

Cuando se trata de uso comercial , los modelos de licencia en torno a NServiceBus son muy flexibles, como indica el amplio espectro de clientes, y pueden estar bien justificados para la administración. Por supuesto, con MassTransit, la licencia es gratuita.

Espero que eso ayude de algún modo.


6
Me gustaría escuchar lo que tiene que decir sobre MassTransit de manera imparcial. Intentar "defender" la implementación de MassTransit de alguna manera. Sin embargo, realmente me gusta nServiceBus, solo estamos luchando con el costo de la licencia al intentar esto en un entorno de producción real, pero solo para las funciones recién agregadas en nuestra plataforma. El código de prueba de concepto podría decirse.
Guillaume Schuermans

1
¿Qué hay de más diferencias técnicas? ¿Qué pasa con la confiabilidad, la deduplicación, el envío de grandes mensajes, etc.? ¿Cómo se comparan estos marcos / formas de juego? ¿Existe alguna lista que compare varios buses de mensajería de esta manera?
Steven

1
Hasta donde yo sé, @Steven, MassTransit no tiene la funcionalidad de deduplicación que se encuentra en la función de bandeja de salida de NServiceBus. Parte del problema de proporcionar el tipo de lista que desea es que cada una de estas tecnologías continúa evolucionando, lo que haría que cualquier lista de ese tipo se vuelva obsoleta.
Udi Dahan

@udidahan, probablemente debería actualizar su vista ya que cerramos a 2021. Quiero saber si MT ha mejorado algo su tecnología central en los últimos años, así como NServiceBus
Volkan Güven

Sí, Volkan. Tanto MassTransit como NServiceBus han seguido evolucionando con el tiempo.
Udi Dahan

8

Sé que es tarde para intervenir en esta pregunta, pero por el bien de bingleability, tengo que mencionar a Rebus (que resulta que soy el autor principal).

Rebus tiene ahora unos 8 años y se ha utilizado para mover dinero y controlar plantas de energía desde el principio.

Es compatible con la mayoría de los sistemas de cola básicos, como MSMQ, RabbitMQ, Azure Service Bus, Azure Storage Queues, Amazon SQS, etc., pero también admite cosas más divertidas como el uso de MSSQL, PostgreSQL y Oracle como transportes.

La wiki de documentación es bastante completa, aunque muchas personas parecen arreglárselas, porque las API de Rebus son fácilmente detectables.

Rebus siempre ha sido (y siempre será) completamente gratis. Tiene licencia del MIT, por lo que básicamente puedes hacer con él lo que te apetezca.

Si termina siendo un usuario serio de Rebus y necesita un acuerdo de soporte formal y herramientas adicionales, puede suscribirse a Rebus Pro , que ofrece Rebus FM (la empresa detrás de Rebus).

Las "herramientas adicionales" mencionadas anteriormente vienen actualmente en forma de Fleet Manager , que puede ayudar con las cosas. Por ejemplo, Fleet Manager reemplaza completamente las colas de errores , por lo que los mensajes fallidos se almacenan allí. Esto significa que los mensajes fallidos se pueden ver, administrar y reintentar en cualquier momento con unos pocos clics en Fleet Manager.


2
Rebus está muy subestimado. Es una verdadera joya ligera en el ecosistema .NET.
ThomasDC

4

Siempre puede usar Shuttle (FOSS): https://github.com/Shuttle/shuttle-esb :)

Documentación (siempre mejorando): http://shuttle.github.io/shuttle-esb/

El proyecto Shuttle lleva casi 2 años y se utilizan sistemas de producción. Será cuestión de elegir lo que resuene contigo.

NServiceBus tiene un buen historial. Lo he usado anteriormente en un sistema de producción (1.9) pero no desde que se volvió comercial (el punto en el que comencé con Shuttle).

No he probado MassTransit.

Supongo que todas tus opciones tendrán lo básico (comando / evento / pub-sub). Sin embargo, NServiceBus tiene sagas y el material del bus de datos, aunque creo que es bastante fácil manejar datos fuera del bus de servicio en sí, como en los controladores de mensajes de su punto final. No sé si MassTransit tiene sagas / bus de datos, pero Shuttle ciertamente no lo tiene.

Otra consideración es probablemente cómo piensa usar el autobús de servicio. Si va a ser parte de un producto, entonces, para una opción comercial como NServiceBus, deberá considerar las implicaciones de costos para los usuarios de su producto y, aunque todavía es algo que debe tenerse en cuenta para el desarrollo interno, ciertamente puede serlo. justificado.



1

Solo para dar una respuesta más actualizada, he desarrollado profesionalmente con ambos ecosistemas y ambos ahora admiten una amplia gama de tecnologías MQ y .NET Core.

Usé NServicebus hace unos años en un nuevo producto en la nube, necesitábamos .NET Core que Mass Transit no admitía en ese momento. Debo decir que es algo encantador para usar como desarrollador, hay muchas frases interesantes, excelentes herramientas / monitoreo y la documentación es realmente buena.

Hay varios niveles de soporte y licencia disponibles, y en la única ocasión en que necesitamos ayuda, fue de buena calidad.


He estado usando Mass Transit durante unos meses en una nueva empresa y prefieren tener una biblioteca gratuita de código abierto. El viaje ha sido un poco más complicado: la documentación para MT falta en algunos lugares y muchos ejemplos / problemas están desactualizados. Tampoco existe la gama de funciones avanzadas, pero es posible que no las necesite para su caso de uso.

Sin embargo, funciona bien y los desarrolladores de MT parecen poner MUCHO esfuerzo en admitir su OSS, mucho más de lo que razonablemente podría esperar.

Entonces, personalmente, mi TLDR sería: obtenga NServicebus si su empresa puede estar convencida de que lo pague, pero MT es una alternativa útil y lo mejor que puede obtener de forma gratuita.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.