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

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

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

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

  1. 当 运行 只有 NServiceBus 而不是常见的 RabbitMQ+NServiceBus 变体时,我会错过任何重要的东西吗?

  2. 看来只要我只使用.net堆栈,我就可以使用NServiceBus?

  3. 既然我已经有WCF轮询更新的数据,你应该只发送一个命令来发起WCF调用。还是应该直接通过消息系统发送更新的数据?

注意:我是 Particular Software 的一名开发人员,该公司是 NServiceBus 的制造商。如果这听起来太商业化了,我深表歉意。

Since I already have WCF to poll for updated data

我不确定你的意思。可能是您已经在 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. 之间进行消息传递时所做的那样
  4. 这取决于。通过消息发送它通常更可靠并且 faster/easier,因为您不必进行 WCF 调用。除此之外,您可以慢慢删除 WCF,并且需要更少的具有 WCF 知识的开发人员。

如果您有更多问题,请随时通过 https://particular.net/support/

与我们联系