NServiceBus vs MassTransit

86

Estou lutando com uma lista de prós e contras em relação ao NServiceBus e MassTransit.

Agora eu sei que já existe um tópico aqui, mas ele realmente não responde às minhas perguntas.

Aqui está o que li até agora:

  1. NServiceBus, sim, é licenciado e não vem de graça.
  2. Mass Transit, sim, é open source, mas a documentação parece estar faltando um pouco.

NServiceBus é mais antigo e tem mais referências. É difícil encontrar informações sobre MassTransit, mas tenho a mente aberta. No entanto, tenho que entregar uma solução sólida e, portanto, tenho que perguntar.

Então, por favor, alguém com experiência em ambos os frameworks. Por que devo escolher NServiceBus? OU Por que devo escolher o MassTransit?

É desempenho, segurança, escala ou?

Jack Andersen
fonte

Respostas:

103

Se eu tivesse que resumir, aqui está o que eu diria:

Se você precisar de suporte comercial, vá para NServiceBus. Se você está confortável em usar fóruns como meio de suporte, o MassTransit é uma ótima opção. Os desenvolvedores têm sido muito receptivos aos nossos problemas até agora. Se você escolher MassTransit, agora vai escolher entre MSMQ e RabbitMQ. Se você precisar do DTC, use o MSMQ. Se você quiser mais recursos e melhor administração, vá com RabbitMQ.

Em nosso projeto, mudamos de NServiceBus para MassTransit por dois motivos:

  1. Mass Transit é grátis
  2. Nós amamos RabbitMQ

Eu usei os dois frameworks. Usei o MassTransit por mais tempo que NServiceBus. Aqui estão os destaques como eu os vejo.

Custo:

  • O MassTransit é licenciado para Apache 2.0 e gratuito para uso em produção comercial, enquanto o NServiceBus não.

Apoio, suporte:

  • Como Udi mencionou, há uma opção para suporte comercial NServiceBus, eu não vi isso para MassTransit.

Transporte:

  • Mass Transit é compatível com MSMQ e RabbitMQ
  • NServiceBus é compatível apenas com MSMQ RabbitMQ é compatível com NServiceBus 4+

RabbitMQ vs MSMQ:

  • MSMQ suporta DTC (coordenador de transações distribuídas) para transações envolvendo vários processos em máquinas potencialmente múltiplas (por exemplo, servidor SQL, Windows Service)
  • RabbitMQ tem uma excelente interface de administração
  • MSMQ existe há mais tempo e é um produto da Microsoft
  • RabbitMQ é mais novo, de código aberto, gratuito e patrocinado pela VMWare
  • O MSMQ é instalado na maioria das máquinas Windows por padrão

Udi Dahan e os caras do MassTransit (Chris Patterson, Dru Sellers e Travis Smith) são todos pessoas brilhantes.

Argila
fonte
8
Boa resposta, Clay. Permitam-me acrescentar que na próxima versão (que sairá em algumas semanas), o NServiceBus também oferecerá suporte a ActiveMQ. Temos atrasado intencionalmente nosso suporte para RabbitMQ até que possamos dar uma história de desduplicação robusta para compensar a falta de DTC - que está planejado para o próximo ano. O MassTransit não faz essa deduplicação (mas pode estar em seu roteiro também, eu não sei).
Udi Dahan
1
Ótimo ouvir isso. A falta de transações verdadeiras de ponta a ponta seria um fator decisivo para sistemas de missão crítica.
Clay
Configuramos um sistema usando nServiceBus e realmente gostamos da capacidade de resposta da comunidade e, no geral, é muito fácil de configurar. Usamos o MSMQ por enquanto, pois é um terreno mais comum. No entanto, embora o nServiceBus tenha muitos modelos de licenciamento, ainda estou bastante confuso sobre qual licença eu (ou nossa equipe) teria que comprar para estar de acordo com os termos de uso. A equipe conta com cerca de 5 pessoas, cada uma delas irá programar contra a API, mas mais no modo POC (sim em produção :)) por enquanto. O MassTransit é o próximo a ser analisado. Parece muito bem documentado.
Guillaume Schuermans
O MassTransit não tem suporte comercial e nenhum de nós tem planos de oferecê-lo no momento. Eu sugeriria a lista de e-mails para suporte do MassTransit, mas eu tenho coisas marcadas com MassTransit no meu leitor RSS, então eu normalmente respondo dentro de um ou dois dias no SO.
Travis
Para MT, você também pode acessar uma conversa do Gitter: gitter.im/Massussels/MassTransit
CrusherJoe
38

Como o autor original de NServiceBus, provavelmente sou um pouco inclinado a minha própria tecnologia, mas tentarei manter isso o mais equilibrado possível.

Suporte de transporte

Ambos NServiceBus e MassTransit são compatíveis com RabbitMQ e Azure Service Bus , mas NServiceBus também suporta:

Sobre o tópico RabbitMQ

Pode-se argumentar que NServiceBus tem suporte mais forte para RabbitMQ - por exemplo, em sua funcionalidade de entrega atrasada enquanto o Mass Transit afirma que seu "plugin ainda é considerado experimental. É suportado por MassTransit, mas não podemos garantir nada mais do que o plugin garante-se. "

Também trabalhamos em estreita colaboração com a equipe RabbitMQ, contribuindo com o .net SDK para o benefício de todo o ecossistema.

Quando se trata de Azure Service Bus

O nível de colaboração que temos com a equipe do Azure Service Bus é ainda maior, com mais de 70 PRs para seu SDK principal .net .

Ao usar o NServiceBus, você se beneficia de toda a profundidade desse conhecimento.

Ferramental

Essa é a maior diferença.

Depois de construir um sistema substancial, ter visibilidade de como todas as diferentes partes móveis conversam entre si torna-se muito importante. O MassTransit não tem muito nesta área além de uma pequena integração por meio de uma fonte de diagnóstico com ferramentas de terceiros, como o Application Insights ou Open Trace.

A plataforma de serviço em torno do NServiceBus vai um pouco além, dando a você a capacidade de ver diagramas de sequência em todos os endpoints com ServiceInsight :

Diagramas de sequência com ServiceInsight

Você também pode obter a visão lógica de todos os seus endpoints e mensagens:

A visão lógica de um sistema NServiceBus

Em essência, você obtém documentação viva da arquitetura do seu sistema.

Gestão e Monitoramento

Esta é outra área onde o MassTransit não tem muito. Quando um sistema de terceiros com o qual você está se integrando fica indisponível e um monte de mensagens em seu sistema acabam na fila de erros, a única solução que o MassTransit tem para mover manualmente essas mensagens de volta mais tarde usando o plugin RabbitMQ Shovel .

A plataforma de serviço em torno do NServiceBus inclui o monitoramento dessa fila de erros, ferramentas gráficas para ver quais são as causas desses erros, bem como a capacidade de reproduzir grupos dessas mensagens com falha e ver se elas foram realmente processadas com sucesso em um aplicativo da web simples chamado ServicePulse .

Falha no agrupamento de mensagens com ServicePulse

Também há a visualização de verificações de saúde que são executadas periodicamente que podem fornecer avisos antecipados de problemas antes que as mensagens comecem a falhar.

E, finalmente, há o monitoramento de desempenho disponível na plataforma:

Monitoramento de desempenho NServiceBus

Você realmente obtém o pacote completo quando se trata de suporte à produção.

Suporte de longo prazo e compatibilidade com versões anteriores

Embora o pessoal do Mass Transit sempre tenha sido extremamente bom em ajudar qualquer pessoa que tenha dúvidas sobre isso no Gitter ou em seu Grupo do Google , não acho que eles fornecem correções de bugs em versões mais antigas. Quando seus sistemas de produção já existem há alguns anos e você não pode simplesmente atualizar tudo o tempo todo, isso começa a ser importante.

Com NServiceBus, o suporte inclui :

  • 2+ anos para cada versão principal
  • Mais 2 anos de suporte estendido
  • Tempos de resposta garantidos em questões críticas
  • Disponibilidade 24x7

Consultoria e Treinamento

De uma perspectiva offline, existem cursos públicos disponíveis em todo o mundo no NServiceBus, bem como muitos consultores que podem ser trazidos para o local para iniciar um projeto ou ajudar em caso de problemas. Já ouvi falar de várias empresas que decidiram mudar do MassTransit para NServiceBus porque não conseguiram colocar alguém no local quando precisavam.

Licenciamento

O que algumas pessoas ainda não sabem sobre o NServiceBus é que ele é GRATUITO para uso pessoal e inicializações .

GRÁTIS para uso pessoal e inicializações

Quando se trata de uso comercial , os modelos de licenciamento em torno do NServiceBus são muito flexíveis, como indica o amplo espectro de clientes, e podem ser bem justificados para a administração. Claro, com o MassTransit, o licenciamento é gratuito.

Espero que ajude de alguma forma.

Udi Dahan
fonte
6
Eu gostaria de ouvir o que você tem a dizer sobre o MassTransit de uma forma imparcial. Tentando 'defender' a implementação do MassTransit de alguma forma. Eu realmente gosto do nServiceBus, no entanto, estamos lutando com o custo da licença tentando fazer isso em um ambiente de produção real, mas apenas para recursos recém-adicionados em nossa plataforma. O código de prova de conceito, você pode dizer.
Guillaume Schuermans
1
E quanto a mais diferenças técnicas? E sobre confiabilidade, desduplicação, envio de mensagens grandes, etc. Como essas estruturas / playforms se comparam? Existe alguma lista que compara vários ônibus de mensagens dessa forma?
Steven
1
Pelo que eu sei, @Steven, MassTransit não tem a funcionalidade de desduplicação encontrada no recurso NServiceBus Outbox. Parte do problema em fornecer o tipo de lista que você deseja é que cada uma dessas tecnologias continua a evoluir, o que tornaria qualquer lista desse tipo obsoleta.
Udi Dahan
@udidahan, você provavelmente deve atualizar sua visão, pois estamos fechando para 2021. Eu quero saber se o MT melhorou de alguma forma sua tecnologia principal nos últimos anos, bem como o NServiceBus
Volkan Güven
Sim, Volkan. Tanto o Mass Ericsson quanto o NServiceBus continuaram evoluindo ao longo do tempo.
Udi Dahan
8

Eu sei que é tarde para responder a esta pergunta, mas pelo bem da diversão, eu tenho que mencionar Rebus (do qual eu sou o autor principal).

O Rebus tem cerca de 8 anos agora e tem sido usado para movimentar dinheiro e controlar usinas de energia desde o início.

Ele oferece suporte à maioria dos sistemas básicos de enfileiramento, como MSMQ, RabbitMQ, Azure Service Bus, Azure Storage Queues, Amazon SQS, etc., mas também oferece suporte a coisas mais engraçadas, como o uso de MSSQL, PostgreSQL e Oracle como transportes.

O wiki de documentação é bastante abrangente, embora muitas pessoas pareçam se dar bem, porque as APIs do Rebus são facilmente descobertas.

Rebus sempre foi (e sempre será) totalmente gratuito. É licenciado pelo MIT, então você pode basicamente fazer com ele o que quiser.

Se você acabar se tornando um usuário sério do Rebus e precisar de um contrato de suporte formal e ferramentas extras, você pode assinar o Rebus Pro , que é oferecido pela Rebus FM (a empresa por trás da Rebus).

O "ferramental extra" mencionado acima atualmente vem na forma de Fleet Manager , que pode ajudar com as coisas. Por exemplo, o Fleet Manager substitui completamente as filas de erros , portanto, as mensagens com falha são armazenadas lá. Isso significa que as mensagens com falha podem ser visualizadas, gerenciadas e repetidas a qualquer momento com apenas alguns cliques no Fleet Manager.

mookid8000
fonte
2
Rebus é subestimado. É uma verdadeira jóia leve no ecossistema .NET.
ThomasDC
4

Você sempre pode usar Shuttle (FOSS): https://github.com/Shuttle/shuttle-esb :)

Documentação (sempre melhorando): http://shuttle.github.io/shuttle-esb/

O projeto Shuttle já está em andamento há quase 2 anos e utiliza sistemas de produção. Será uma questão de escolher o que ressoa em você.

NServiceBus tem um bom histórico. Eu o usei anteriormente em um sistema de produção (1.9), mas não desde que se tornou comercial (o ponto em que comecei com o Shuttle).

Eu não experimentei o MassTransit.

Eu acho que todas as suas opções terão o básico (comando / evento / pub-sub). No entanto, NServiceBus tem sagas e as coisas do barramento de dados, embora eu ache que seja fácil lidar com dados fora do barramento de serviço em si, como em seus manipuladores de mensagens de endpoint. Não sei se o MassTransit tem sagas / barramento de dados, mas o Shuttle certamente não tem.

Outra consideração é provavelmente como você pretende usar o barramento de serviço. Se for parte de um produto, para uma opção comercial como NServiceBus, você precisaria considerar as implicações de custo para os usuários do seu produto e, embora ainda seja algo que precise ser considerado para desenvolvimento interno, certamente pode ser justificado.

Eben Roux
fonte
2

Apenas para dar uma resposta mais atualizada, desenvolvi profissionalmente com ambos os ecossistemas e agora ambos oferecem suporte a uma ampla gama de tecnologias MQ e .NET Core.

Usei o NServicebus alguns anos atrás em um novo produto em nuvem, precisávamos do .NET Core, que o Mass Transit não suportava na época. Eu tenho que dizer - é uma coisa linda de usar como desenvolvedor, há muitos liners legais, ótimas ferramentas / monitoramento e a documentação é realmente boa.

Vários níveis de suporte e licença estão disponíveis e, em uma ocasião em que precisamos de alguma ajuda, era de boa qualidade.


Estou usando o Mass Transit por alguns meses em uma nova empresa, e eles preferem ter uma biblioteca de código aberto gratuita. A jornada tem sido um pouco mais difícil - a documentação para MT está faltando em alguns lugares e muitos exemplos / problemas estão desatualizados. Não existe uma gama completa de recursos avançados, mas você pode não precisar deles para seu caso de uso.

Ele funciona bem, porém, e os desenvolvedores de MT parecem se esforçar muito para oferecer suporte a seu software de fonte aberta - muito além do que você poderia razoavelmente esperar.

Então, pessoalmente, meu TLDR seria - obtenha NServicebus se sua empresa puder ser convencida a pagar por ele, mas o MT é uma alternativa útil e o melhor que você pode obter gratuitamente.

Phil S
fonte