消息代理(Kafka、RabbitMQ)VS服务总线(nServiceBus)

Mr *_* MP 4 .net wcf nservicebus rabbitmq apache-kafka

我已经阅读了很多有关上述三个系统的内容。但我仍然不确定该使用什么。他们似乎都完成了我所需要的:

我希望当另一个服务触发事件/命令/消息时更新客户端服务。我当前正在运行WCF服务,并且客户端服务可以主动向其他服务请求更新的数据。这应该通过消息代理/服务总线来改变。我也不关心客户端是否离线并且没有收到更新,因为当上线时它会自动获取最新数据WCF。这就是为什么我认为Kafka这是错误的方法。另一方面,我在其他公司的安全相关环境中部署了该软件。由于这是一个遗留应用程序(没有 docker 或易于部署),因此需要安装 Erlang,因此RabbitMQ无法打开所有端口。这给我留下了NServiceBus.

  1. NServiceBus仅运行而不是常见的变体时,我是否会错过任何重要的东西RabbitMQ+NServiceBus

  2. 似乎只要我.net专门使用堆栈,我就可以使用NServiceBus?

  3. 由于我已经必须WCF轮询更新的数据,因此您应该只发送命令来发起呼叫WCF。或者您应该直接通过消息系统发送更新的数据本身?

Den*_*elt 6

注:我是 NServiceBus 的制造商 Specific Software 的开发人员。如果这听起来太像广告了,我深表歉意。

因为我已经有 WCF 来轮询更新的数据

我不确定你的意思是什么。您可能已经在 MSMQ 之上使用 WCF 消息传递。这是可能的,也是一个可行的解决方案。MSMQ 是排队技术,WCF 是 MSMQ 之上的抽象。

MSMQ、RabbitMQ、Azure Service Bus、Amazon SQS 都是排队技术,尽管 MSMQ 有点不同,因为它更像是一种总线风格并且分布在机器上。

NServiceBus 是这些排队技术之上的抽象。NServiceBus 可让您专注于开发功能,而不是在单一排队技术之上编写管道代码。最重要的是,它还添加了大量附加功能。如果您决定不使用 NServiceBus,则必须自己构建其中一些功能。这完全没问题,但需要时间。

回答具体问题

  1. 如果使用NServiceBus,还需要一个排队技术,我们称之为transport。MSMQ 或 RabbitMQ 或任何你想要的。
  2. 当然可以,但仍然可以进行本机集成,就像在 Java 和 .NET 之间进行消息传递时所做的那样
  3. 那要看。通过消息发送通常更可靠、更快/更容易,因为您不必执行 WCF 调用。除此之外,您可以慢慢删除 WCF,并且需要更少的具有 WCF 知识的开发人员。

如果您有更多问题,请随时通过https://preferred.net/support/与我们联系