NServiceBus和Rabbit MQ或Kafka

MJK*_*MJK 54 nservicebus message-queue rabbitmq apache-kafka

我正在尝试学习消息传递系统.我发现RabbitMq和NServiceBus在很少的地方一起使用.我的问题是

  1. 如果我使用RabbitMQ那么为什么我需要NServiceBus?反之亦然
  2. 什么NServiceBus可以做但RabbitMQ或卡夫卡不能?
  3. 我可以一起使用NServiceBus和kafka吗?或者Apache-Kafka不需要NServiceBus

Der*_*ley 100

多年前,我问自己同样的问题.我看着NServiceBus使用不同的消息队列,但问题是一样的.

我决定不使用NServiceBus.

6个月后,我意识到我已经重建了NServiceBus所做的一半......只是更糟糕.

你为什么需要使用带有RabbitMQ的NServiceBus的问题,就是问为什么你需要.NET Framework与ASP.NET MVC,WinForms,或XAML,或.NET附带的任何内置库,当你有公共语言运行时.

毕竟,CLR不应该足够吗?

当然不是.拥有代码可以执行的运行时 - MSIL解释器和执行引擎 - 还不足以提高工作效率.

当然,您可以编写获取输入并生成输出的命令行应用程序.但是尝试在没有公共库的情况下构建一个真正的应用程序 - 没有内置的SQL Server驱动程序; 没有任何第三方控件或库.构建不带System.Windows命名空间的Windows桌面应用程序.

您需要这些库为您提供集合,数据库访问,窗口对象和UI控件.

同样,RabbitMQ为您提供了入门和工作所需的一切,但还不足以保持生产力.

当然,您可以获取RabbitMQ的.NET驱动程序并开始生成和使用消息.

有一段时间,这将工作得很好.

很快,您会发现自己在驱动程序周围创建了一个包装器,因此您可以减少需要编写的代码量.

然后你会发现自己需要处理ack vs nack,你将为此创建一个简单的API.

然后,对nack调用会弹出对死信队列的需求,你可以将它包装在你的API中 - 当然,与rabbitmq驱动程序相比,这简化了.

最终,您将需要处理有害消息 - 格式错误并导致异常的消息.再一次,您不想为此编写一次性代码,因此您将编写一个库来处理它.

这个清单一直在继续.

从现在起6个月后,你会发现自己正在使用一个半写的,几乎没有指定的,不可测试的库,它只模仿NServiceBus(或MassTransit或你选择的任何其他服务总线库)的价值和功能.

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

  • 我终于得到了简洁的答案!"为什么你需要使用带有RabbitMQ的NServiceBus的同等问题,就是问你为什么需要.NET Framework与ASP.NET MVC,WinForms,或XAML,或.NET附带的任何内置库,当你有命令语言运行时." 我打算发推文. (2认同)