NServiceBus和MassTransit的比较

104

我正在权衡使用NServiceBus和MassTransit的优缺点。

据我所知,这里已经有一个讨论帖子了,但它并没有真正回答我的问题。

以下是我迄今为止阅读的内容:

  1. NServiceBus,是需要付费授权的。
  2. MassTransit,是开源的,但文档似乎有些欠缺。

NServiceBus比较老,参考资料更多。MassTransit很难找到相关资料,但我持开放态度。然而,我必须提供一个稳定的解决方案,因此我不得不问问。

因此,请有使用过这两个框架的人。我为什么要选择NServiceBus?或者为什么要选择MassTransit?

是性能、安全性、可扩展性还是其他原因?


现在有一个示例,展示了如何混合使用MassTransit和NServiceBus,通过向NServiceBus添加管道行为,使其能够理解由MassTransit发送的消息。https://docs.particular.net/samples/pipeline/masstransit-messages/ - David Boike
5个回答

117

如果我必须总结一下,我会这样说:

如果你需要商业支持,请选择NServiceBus。如果你习惯使用论坛作为支持手段,MassTransit是一个不错的选择。开发人员迄今为止非常积极地响应我们的问题。如果您选择MassTransit,现在您将在MSMQ和RabbitMQ之间进行选择。如果您需要DTC,请选择MSMQ;如果您想要更多功能和更好的管理,请选择RabbitMQ。

在我们的项目中,我们从NServiceBus切换到MassTransit的原因有两个:

  1. MassTransit是免费的
  2. 我们喜欢RabbitMQ

我使用过这两个框架。我使用MassTransit的时间比NServiceBus长。以下是我认为的亮点。

费用:

  • MassTransit采用Apache 2.0许可证,可供商业生产使用,而NServiceBus则不行。

支持:

  • 正如Udi所提到的,有商业NServiceBus支持的选项,但我没有看到类似的MassTransit支持。

传输:

  • MassTransit支持MSMQ和RabbitMQ
  • NServiceBus仅支持MSMQ NServiceBus 4+中支持RabbitMQ

RabbitMQ vs MSMQ:

  • MSMQ支持DTC(分布式事务协调器),可处理涉及多个进程,可能位于多台机器上的事务(例如SQL服务器、Windows服务)
  • RabbitMQ具有出色的管理界面
  • MSMQ存在更长时间,是微软产品
  • RabbitMQ较新,开源、免费,并得到VMWare的赞助
  • 大牛Udi Dahan和MassTransit团队(Chris Patterson、Dru Sellers和Travis Smith)

9
好答案,Clay。请允许我补充一点,在下一个版本(将在几周后发布)中,NServiceBus也将支持ActiveMQ。我们有意推迟了对RabbitMQ的支持,直到我们能够提供一个强大的去重故事来弥补缺乏DTC的不足 - 这计划于明年实现。MassTransit没有做这个去重(但这也可能是他们未来的路线图之一,我不确定)。 - Udi Dahan
1
很高兴听到这个消息。对于关键任务系统来说,缺乏真正的端到端交易将是一个无法接受的问题。 - Clay
我们已经使用 nServiceBus 建立了一个系统,我们非常喜欢来自社区的响应,并且总体上配置也相当容易。目前我们使用 MSMQ,因为它更加通用。然而,尽管 nServiceBus 有许多许可模式,我仍然不太清楚我们(或我们的团队)需要购买哪个许可证才能符合使用条款。团队中大约有5人,每个人都将根据 API 进行编程,但目前主要是在 POC 模式下(是的,在生产环境中 :))。接下来要审查的是 MassTransit。它看起来文档很完整。 - Guillaume Schuermans
MassTransit目前没有商业支持,我们中也没有任何人计划提供它。我建议使用MassTransit邮件列表获取支持,但我在我的RSS阅读器中有标记为MassTransit的内容,所以通常会在一两天内在SO上回复。 - Travis
对于MT,您还可以前往Gitter对话:https://gitter.im/MassTransit/MassTransit - CrusherJoe

71
作为 NServiceBus 的原始作者,我可能会对自己的技术有些偏见,但我会尽量保持客观。 传输协议支持 NServiceBus 和 MassTransit 都支持 RabbitMQAzure Service Bus,但是 NServiceBus 还支持以下协议:

帮助你不仅仅是这样,NServiceBus还通过其Transport Bridge使您能够在不同的传输上透明地运行不同的端点,在将本地系统与新的云功能集成时非常重要。

关于RabbitMQ

可以说NServiceBus对RabbitMQ的支持更强大-例如在其延迟交付功能方面,而Mass Transit则声明他们的“插件仍被认为是实验性的。它得到了MassTransit的支持,但我们不能保证除插件本身外还有其他东西。”

我们还与RabbitMQ团队密切合作,为整个生态系统的利益贡献.net SDK,并继续因此而受到认可,例如在这条推文中:https://twitter.com/RabbitMQ/status/1547946916419231744

enter image description here

当谈到Azure Service Bus时

我们与Azure Service Bus团队的合作水平更高,已经对他们的.net core SDK进行了70多个PR

当您使用NServiceBus时,您将受益于这些知识的全部深度。

工具

这是最大的区别。

一旦您建立了一个实质性的系统,了解所有不同移动部件如何相互通信变得非常重要。MassTransit在这个领域没有太多内容,除了通过Diagnostic Source到第三方工具(如Application Insights或Open Trace)的小型集成。

NServiceBus周围的服务平台走得更远,使您能够使用ServiceInsight查看所有端点的序列图:

Sequence diagrams with ServiceInsight

你还可以获得所有端点和信息的逻辑视图:

The logical view of an NServiceBus system

实际上,您可以获得系统架构的实时文档。
管理和监控方面,MassTransit并不是很强大。当您正在集成的第三方系统不可用且您系统中有许多消息排队到错误队列时,MassTransit的唯一解决方案是使用RabbitMQ Shovel插件手动将这些消息移回。NServiceBus周围的服务平台包括监视该错误队列、图形化工具以查看错误原因以及能够重放那些失败消息组并在名为 ServicePulse 的简单Web应用程序中查看它们实际上已成功处理

Failed message grouping with ServicePulse

此外,还有定期运行的健康检查的可视化,可以在消息开始失败之前提供问题的早期警告。

最后,平台上提供了性能监控

NServiceBus performance monitoring

当涉及到生产支持时,您真的可以获得全方位的服务。

长期支持和向后兼容性

虽然 Mass Transit 的开发人员一直非常擅长在 Gitter 或他们的 Google Group 上帮助任何有疑问的人,但我认为他们不会为旧版本提供错误修复。当您的生产系统运行了几年,而您不能一直升级所有内容时,这就变得很重要。

NServiceBus 的 support includes

  • 每个主要版本都有 2 年以上的支持时间
  • 额外的 2 年 extended support
  • 保证针对关键问题的响应时间
  • 24x7 可用性

风险管理

Chris Patterson是MassTransit的创造者,他是我的老朋友,多年来他对社区的贡献都是出于对这项工作的热爱,我对他充满敬意。

问题在于,多年来,只有Chris一个人在开发和维护MassTransit,而且他也是唯一一个能够胜任这项工作的人。如果他出了什么事情(我祝他最好的),我真的不知道谁能够接替他的位置。

对于那些希望确保自己建立在坚实基础上的使命关键项目和产品来说,这种风险可能是无法承受的。相比之下,NServiceBus周围的大型组织拥有数十名全职员工,并与Microsoft、AWS和RabbitMQ建立了深入的合作关系,对于这些环境来说,选择NServiceBus可能是更少风险的选择。

咨询和培训

从离线角度来看,全球范围内提供有关NServiceBus的公共课程以及许多顾问可以被引进现场启动项目或在出现问题时提供帮助。我听说过几家公司决定从MassTransit转向NServiceBus,因为他们在需要时找不到现场支持。

许可证

有些人可能还不知道关于NServiceBus的一件事,那就是它对于个人使用和创业公司是免费的, 甚至对于一些有限的生产使用也是如此。

FREE for personal use and startups

当涉及到商业使用时,NServiceBus的许可模型非常灵活,正如广泛的客户群所表明的那样,并且可以很好地向管理层进行证明。当然,对于MassTransit,许可是免费的。


9
我想听听您以非偏见的方式谈论MassTransit。试图用一种方式“捍卫”MassTransit的实现。我非常喜欢nServiceBus,但我们仅在我们的平台中为新添加的功能尝试它时,会遇到许可成本方面的困难。这可以说是概念验证代码。 - Guillaume Schuermans
1
更多的技术差异呢?可靠性、去重、发送大消息等方面如何比较这些框架/平台?是否有任何比较多个消息总线的列表? - Steven
1
据我所知,@Steven,MassTransit没有NServiceBus Outbox功能中的去重复功能。提供您想要的那种列表的问题的一部分是,这些技术中的每一个都在不断发展,这将使得任何这样的列表变得过时。 - Udi Dahan
1
@udidahan,随着我们逐渐接近2021年,您可能需要更新您的观点。我想知道MT在过去几年中是否增强了其核心技术,以及NServiceBus的情况如何。 - knoxgon
1
是的,Volkan。MassTransit和NServiceBus都在不断发展。 - Udi Dahan
比 NServiceBus 好了亿万倍,花的钱也值得。 - Zodraz

13
我知道回答这个问题有点晚了,但是为了可搜索性,我必须提到Rebus(我恰好是主要作者)。
Rebus现在已经有8年历史了,从一开始就被用来移动资金和控制电厂。
它支持大多数基本的队列系统,如MSMQ、RabbitMQ、Azure Service Bus、Azure Storage Queues、Amazon SQS等,但它也支持更有趣的东西,比如使用MSSQL、PostgreSQL和Oracle作为传输。 文档wiki相当全面,虽然许多人似乎可以通过,因为Rebus的API非常易于发现。
Rebus始终是(并将始终是)完全免费的。它采用MIT许可证,因此您基本上可以随心所欲地使用它。
如果您最终成为Rebus的重度用户,并且需要正式的支持协议和额外的工具,则可以订阅Rebus Pro,该服务由Rebus FM(Rebus背后的公司)提供。
上述提到的“额外工具”目前以Fleet Manager的形式出现,它可以帮助处理一些事情。例如,Fleet Manager完全替代了错误队列(即死信队列),因此失败的消息会被存储在那里。这意味着失败的消息可以随时在Fleet Manager中通过几次点击查看、管理和重试

4
Rebus被低估了。它是.NET生态系统中一个真正的轻量级宝石。 - ThomasDC
是的...@mookid8000。我曾经和他们三个一起工作过...并且看到了所有的东西...你的项目将会选择NServiceBus。继续加油,做好你的惊人项目! - Zodraz

13

为了给予更实时的回答,我曾经在两个技术生态系统中进行过专业开发,它们现在都支持广泛的MQ技术和.NET Core。

几年前,在新的云产品上,我使用了NServicebus,我们需要.NET Core,而当时Mass Transit不支持。我必须说 - 作为开发者,使用它是一件美妙的事情,有很多不错的单行代码、出色的工具/监控和非常好的文档。

可提供各种级别的支持和许可证,我们某个时候需要帮助,它提供的质量很高。


在一家新公司里,我已经使用Mass Transit几个月了,并且他们更喜欢使用免费的开源库。这个过程有点坎坷 - MT的文档在某些地方缺乏,很多示例/问题已经过时。也没有相应的高级功能,但对于他们的用例可能并不需要。

它能正常工作,MT的开发人员似乎会投入很多精力来支持他们的OSS - 远远超出你可以合理期望的范围。

因此,个人认为 - 如果公司可以被说服支付费用,那就选择NServicebus,但MT是一个可用的替代品,并且是免费使用中最好的。


5
你可以使用Shuttle(FOSS):https://github.com/Shuttle/shuttle-esb :)
文档(一直在改进):http://shuttle.github.io/shuttle-esb/ Shuttle项目已经进行了近2年,被用于生产系统。选择哪个取决于你的喜好。
NServiceBus有良好的记录。我之前在生产系统(1.9)上使用过它,但自从它商业化以来(我开始使用Shuttle的时间点),我就没有再使用过。
我没有尝试过MassTransit。
我猜你所有的选项都会有基本的功能(命令/事件/发布-订阅)。然而,NServiceBus确实有saga和数据总线等功能,尽管我认为处理服务总线外部的数据(如在端点消息处理程序中)足够容易。我不知道MassTransit是否有saga/数据总线,但Shuttle肯定没有。
另一个考虑因素可能是你打算如何使用服务总线。如果它是产品的一部分,那么对于像NServiceBus这样的商业选项,你需要考虑用户的成本影响,尽管这仍然是内部开发需要考虑的问题,但当然可以得到证明。

9
MassTransit确实有saga:http://docs.masstransit-project.com/en/latest/overview/saga.html - Clay

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接