Rabbitmq NServiceBus和Rabbit MQ或Kafka

Rabbitmq NServiceBus和Rabbit MQ或Kafka,rabbitmq,apache-kafka,message-queue,nservicebus,Rabbitmq,Apache Kafka,Message Queue,Nservicebus,我正在努力学习信息系统。我发现RabbitMq和NServiceBus在很少的地方一起使用。我的问题是 如果我正在使用RabbitMQ,那么为什么我需要NServiceBus?反之亦然 NServiceBus可以做什么,但RabbitMQ或Kafka不能 我可以一起使用NServiceBus和kafka吗?或者Apache Kafka不需要NServiceBus 几年前,我问自己同样的问题。我希望NServiceBus使用不同的消息队列,但问题是相同的 我决定不使用NServiceBus 6个月

我正在努力学习信息系统。我发现RabbitMq和NServiceBus在很少的地方一起使用。我的问题是

  • 如果我正在使用RabbitMQ,那么为什么我需要NServiceBus?反之亦然
  • NServiceBus可以做什么,但RabbitMQ或Kafka不能
  • 我可以一起使用NServiceBus和kafka吗?或者Apache Kafka不需要NServiceBus

  • 几年前,我问自己同样的问题。我希望NServiceBus使用不同的消息队列,但问题是相同的

    我决定不使用NServiceBus

    6个月后,我意识到我已经重建了NServiceBus的一半功能。。。只是更糟糕

    关于为什么需要N Service Bus和RabbitMQ的等效问题是,当您有公共语言运行时时,为什么需要带有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或您选择的任何其他service bus库)的价值和功能


    我不会说你必须使用NServiceBus。我想说的是,你应该学习RabbitMQ是如何工作的,没有它。但是,一旦您超越了发送和接收消息的基本知识,NServiceBus和其他服务总线实现的价值就会变得非常明显、非常迅速。

    现在,NServiceBus中的Kafka transport似乎得到了社区的支持:
    (我自己还没试过)。

    关于你的第二个@vappolinario,谢谢。卡夫卡也是这样吗?我终于有了一个简洁的答案!“关于为什么需要N Service Bus和RabbitMQ的等价问题是,当您拥有命令语言运行时时,为什么需要带有ASP.NET MVC、WinForms、XAML或.NET附带的任何内置库的.NET Framework。”Annd我将在推特上发这条消息。一个非常清晰的解释@Derick。非常感谢您花时间解释这一点。现在已经很清楚了,谢谢,写得很好。您可以随时查看www.massttransit-project.com/Perfect!自从我支持的产品涉及NServiceBus以来,我一直在为这个问题挠头,但我始终不明白为什么首先需要它!!恐怕现在这是一条死胡同。但它似乎没有得到维护。