NServiceBus and Rabbit MQ or Kafka

82

我正试图学习消息系统。我发现 RabbitMQ 和 NServiceBus 有时会一起使用。我的问题是:

  1. 如果我正在使用 RabbitMQ,那么我为什么需要 NServiceBus?反之亦然。
  2. NServiceBus 能做什么,但 RabbitMQ 或 Kafka 无法做到?
  3. 我能同时使用 NServiceBus 和 Kafka 吗?或者 Apache-Kafka 不需要 NServiceBus?

1
关于你的第二个问题(https://dev59.com/oGkw5IYBdhLWcg3w6e0b)相关。 - vappolinario
1
@vappolinario 谢谢您的回复。Kafka也是这样吗? - MJK
1
关于Kafka的问题,可以参考以下链接:https://particular.net/blog/lets-talk-about-kafka - Udi Dahan
2个回答

165

多年前,我曾问过自己同样的问题。我正在考虑使用 NServiceBus 与不同的消息队列一起工作,但问题是相同的。

我决定不使用 NServiceBus。

6个月后,我意识到我已经重新构建了NServiceBus的一半...只不过做得更糟糕。

使用RabbitMQ时为什么需要NServiceBus的等效问题,就像使用ASP.NET MVC、WinForms、XAML或.NET附带的任何内置库时为什么需要.NET Framework一样,因为你有公共语言运行时吗?

毕竟,CLR足够了吗?

当然不。仅仅拥有代码可以执行的运行时 - MSIL解释器和执行引擎 - 是远远不够的,无法提高生产力。

当然,您可以编写接收输入和生成输出的命令行应用程序。但是如果没有常见的库 - 没有内置的SQL Server驱动程序;没有任何第三方控件或库,则尝试构建真正的应用程序。在没有System.Windows名称空间的情况下构建Windows桌面应用程序。

您需要这些库来提供集合、数据库访问、窗口对象和UI控件。

同样地,RabbitMQ为您提供了开始工作所需的一切,但不足以保持生产力。当然,您可以获取RabbitMQ的.NET驱动程序并开始生产和消费消息。有一段时间,这将运行得很好。很快,您会发现自己在驱动程序周围创建包装器,以便减少需要编写的代码量。然后,您将发现需要处理ack与nack,并为此创建一个简单的API。然后,随着nack调用出现死信队列的需求,您将把它包装在您的API中-当然相对于rabbitmq驱动程序而言更加简化。最终,您将想要处理毒消息-即格式不正确且导致异常的消息。再一次,您不想为此编写一次性代码,因此您将编写一个库来处理它。这个列表还有很多其他内容。从现在起6个月后,您会发现自己正在使用一个半成品、几乎没有规格说明、无法测试的库,它只模仿NServiceBus(或MassTransit或您选择的任何其他服务总线库)的价值和功能。

我不会说你必须使用NServiceBus。而且我会说,即使没有它,你也应该学习RabbitMQ的工作原理。但是一旦你超越了发送和接收消息的基础知识,NServiceBus和其他服务总线实现的价值会非常明显,非常快速。


8
我终于得到了简明的答案!“为什么你需要在RabbitMQ中使用NServiceBus,等同于问为什么你需要在ASP.NET MVC、WinForms、XAML或任何.NET自带库中使用.NET框架,当你有命令语言运行时。” 我要发推特了。 - Justin Self
谢谢,写得很好。 - Aviram Fireberger
你可以随时查看www.masstransit-project.com/。 - SDanks
我一直在努力解释我们选择NServiceBus而不是仅使用RabbitMQ的原因,而你的总结恰到好处。我们早期决定希望免费获得所有这些功能,而不是重新发明轮子。这个小缺点是我们没有从自己的错误中学习和那些教训持续更长时间。 - Christian Paulin
@ChristianPaulin 当谈论NServiceBus时,“免费”可能有些夸张了 :) - rlesias
显示剩余3条评论

1

2
这个链接已经失效了,恐怕无法访问。 - Stephen Kennedy
https://github.com/pablocastilla/NServiceBus.Kafka 但似乎没有得到维护。 - Trygve
1
请查看https://particular.net/blog/lets-talk-about-kafka,了解Particular对于Kafka的观点。 - David Boike

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