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

Chr*_*lis 7 msmq masstransit nservicebus distributed-transactions rabbitmq

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

Ebe*_*oux 18

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

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

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

  • 消息传递
    • 完全一次(分布式事务 - 所有排队系统都不支持分布式事务)
    • 至少一次(非交易)
    • 最多一次(可能需要一些事务处理,但你可以逃脱没有分布式事务)
  • 重试失败的消息
  • 请求/响应
  • 消息分发
  • 发布/订阅(直接使用RabbitMQ可能很容易,而不是直接使用MSMQ)
  • 消息幂等
  • 依赖注入

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

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

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