为什么在MSMQ/RabbitMQ等消息队列系统的基础上,我们需要N服务总线/MassTransit等服务总线框架?

为什么在MSMQ/RabbitMQ等消息队列系统的基础上,我们需要N服务总线/MassTransit等服务总线框架?,rabbitmq,msmq,nservicebus,distributed-transactions,masstransit,Rabbitmq,Msmq,Nservicebus,Distributed Transactions,Masstransit,在分布式消息事务世界中,我试图理解开发分布式系统所涉及的不同部分。据我所知,您可以使用带有消息队列系统的企业总线设计消息传递系统。为什么两者都用是个好主意?仅针对消息队列系统进行编程是否可以实现同样的效果?两者结合使用有什么好处?我无法直接评论MassTransit,只是对其进行了修补 我使用NServiceBus,我是它的粉丝。我认为直接使用排队技术是有充分理由的,但我认为使用MSMQ/RabbitMQ运行您自己的ESB要比简单地使用商业产品(或开源产品,如MassTransit)花费更多 你

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

我无法直接评论MassTransit,只是对其进行了修补

我使用NServiceBus,我是它的粉丝。我认为直接使用排队技术是有充分理由的,但我认为使用MSMQ/RabbitMQ运行您自己的ESB要比简单地使用商业产品(或开源产品,如MassTransit)花费更多


你需要它吗?不。如果这些功能符合您的要求,您的生活会更轻松吗?当然可以。

您当然可以直接针对消息传递基础架构进行编码,您会发现每种传输都有其优缺点。然而,在这一过程中,您需要做出许多决策,而这正是服务总线可以提供帮助的地方

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

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

  • 消息传递
    • 仅一次(分布式事务-并非所有排队系统都支持分布式事务)
    • 至少一次(非事务性)
    • 最多一次(可能需要一些事务处理,但您可以不进行分布式事务处理)
  • 重试失败的消息
  • 请求/答复
  • 消息分发
  • 发布/订阅(直接使用RabbitMQ可能非常容易,而直接使用MSMQ则不太容易)
  • 消息幂等性
  • 依赖注入
一些服务总线实现为实现流程管理器(most称为sagas)提供了一个框架。我目前的观点是,流程经理需要像任何其他实体一样是一等公民,但这可能会改变:)

无论如何,如果您仍在评估选项,也可以看看我的自由和开放源码软件项目:


因此,服务总线可能会为您带来很多开箱即用的东西,而直接针对队列编码可能是一项需要做的工作。

“服务总线可能会为您带来很多开箱即用的东西,而直接针对队列编码可能是一项需要做的工作。”。很好的总结。谢谢使用MassTransit在MSMQ上轻松发布/订阅。嗯,不管怎么说,MSMQ上的任何东西都很容易。@stuartd:我的意思是,直接使用RabbitMQ发布/订阅相当容易,而直接使用MSMQ则不然。使用像shuttle esb这样的服务总线肯定会让生活更轻松:)@EbenRoux-yup,ServiceBus-FTW。你的意思在你的回答中并不完全清楚。@stuartd:我编辑了答案,使之更清楚,谢谢。