为什么我们需要在MSMQ / RabbitMQ等消息排队系统之上的服务总线框架,如NService Bus / MassTransit?

时间:2014-09-20 22:27:45

标签: rabbitmq msmq nservicebus distributed-transactions masstransit

在分布式消息事务世界中,我试图了解开发分布式系统所涉及的不同部分。据我所知,您可以使用支持消息队列系统的企业总线设计消息传递系统。为什么两者都使用是个好主意?通过仅对消息排队系统进行编程可以实现同样的目的吗?将两者结合使用有什么好处?

3 个答案:

答案 0 :(得分:17)

您当然可以直接针对消息传递基础架构进行编码,您会发现w.r.t有利有弊。每次运输。不过,您需要做出许多决定,这也是服务总线可能提供帮助的地方。

直接针对排队系统进行开发将不可避免地导致您需要的各种抽象以防止重复。

服务总线将提供以下意见/实施:

  • 消息传递
    • 完全一次(分布式事务 - 所有排队系统都不支持分布式事务)
    • at-least-once (非交易)
    • 最多一次(可能需要进行一些事务处理,但您可以通过无分布式事务来逃避)
  • 重试失败的消息
  • 请求/回复
  • 消息分发
  • 发布/订阅(直接使用RabbitMQ可能很容易,而不是直接使用MSMQ)
  • 消息Idempotence
  • 依赖注入

一些服务总线实现提供了一个实现流程管理器的框架(大多数人称为sagas)。我目前的观点是,流程经理需要像其他任何实体一样成为一流的公民,但可能会改变:)

无论如何,如果您还在评估选项,您还可以查看我的FOSS项目:http://shuttle.github.io/shuttle-esb/

因此,服务总线可能会为您带来相当多的开箱即用,而直接对队列进行编码可能需要一些工作才能开始。

答案 1 :(得分:3)

我无法直接评论MassTransit,只是修改了它。

我使用NServiceBus并且是它的粉丝。我认为直接使用排队技术是有正当理由的,但我认为使用MSMQ / RabbitMQ滚动自己的ESB会比仅仅使用商业产品(或开源产品,例如MassTransit)花费更多。

所以你需要吗?不会。如果功能符合您的要求,它会让您的生活更轻松吗?绝对

答案 2 :(得分:2)

以下是MassTransit文档本身的内容(当问题首次发布时我不认为它存在):

What does MassTransit add on top of MSMQ and RabbitMQ?