NServiceBus 和 Rabbit MQ 或 Kafka
Posted
技术标签:
【中文标题】NServiceBus 和 Rabbit MQ 或 Kafka【英文标题】:NServiceBus and Rabbit MQ or Kafka 【发布时间】:2016-11-01 09:16:49 【问题描述】:我正在尝试学习消息传递系统。我发现 RabbitMq 和 NServiceBus 在少数地方一起使用。我的问题是
-
如果我使用的是 RabbitMQ,那我为什么需要 NServiceBus?反之亦然
NServiceBus 可以做什么,而 RabbitMQ 或 Kafka 不能?
我可以同时使用 NServiceBus 和 kafka 吗?或者 Apache-Kafka 不需要 NServiceBus
【问题讨论】:
与你的第二个question有关 @vappolinario 谢谢。卡夫卡也一样吗? 【参考方案1】:几年前,我问过自己同样的问题。我正在寻找 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 和其他服务总线实现的价值就会变得非常明显,非常迅速。
【讨论】:
我终于有一个简洁的答案了! “为什么需要带有 RabbitMQ 的 NServiceBus 的等效问题是问为什么需要带有 ASP.NET MVC、WinForms 或 XAML 或 .NET 附带的任何内置库的 .NET Framework,当你有命令语言运行时。”我要发推文。 一个非常清晰的解释@Derick。非常感谢您花时间解释这一点。现在很清楚了 谢谢,写得好。 您可以随时查看 www.masstransit-project.com/ 完美!自从我支持的产品涉及 NServiceBus 以来,我一直在为这个问题摸不着头脑,但我从来不明白为什么首先需要它!【参考方案2】:现在 NServiceBus 中似乎有社区对 Kafka 传输的支持:https://docs.particular.net/nservicebus/kafka/ (我自己还没试过)。
【讨论】:
恐怕现在是死链接了。 github.com/pablocastilla/NServiceBus.Kafka 不过好像没维护。以上是关于NServiceBus 和 Rabbit MQ 或 Kafka的主要内容,如果未能解决你的问题,请参考以下文章