Message Broker (Kafka, RabbitMQ) VS Service Bus (nServiceBus



我已经读了很多关于提到的三个系统的信息。但我仍然不确定该用什么。他们似乎都完成了我需要的:

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

  1. 当只运行NServiceBus而不是常见的RabbitMQ+NServiceBus变体时,我是否错过了任何关键的东西?

  2. 似乎只要我只使用.net堆栈,我就对NServiceBus很好?

  3. 由于我已经有WCF轮询更新的数据,您是否应该只发送命令来启动WCF调用。还是应该直接通过消息传递系统发送更新的数据本身?

注意:我是 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://particular.net/support/

最新更新