为什么我们需要像NService Bus/MassTransit这样的服务总线框架来覆盖像MSMQ/RabbitMQ等消息队列系统呢?

7
在分布式消息事务的世界中,我试图了解开发分布式系统所涉及的不同部分。据我所知,您可以使用支持消息队列系统的企业总线来设计消息系统。为什么同时使用这两者是个好主意呢?是否只编写针对消息队列系统的程序也可以实现相同的功能呢?使用两者的优点是什么?
2个回答

18

您当然可以直接编写针对消息基础结构的代码,但是您会发现每种传输方式都有其优缺点。您需要沿途做出许多决策,这就是服务总线可能会有所帮助的地方。

直接开发队列系统将不可避免地导致您需要抽象出各种内容以防止重复。

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

  • 消息传递
    • 仅一次(分布式事务 - 并非所有队列系统都支持分布式事务)
    • 至少一次 (非事务性)
    • 至多一次 (可能需要一些事务处理,但可以摆脱无分布式事务)
  • 失败消息重试
  • 请求 / 响应
  • 消息分发
  • 发布/订阅(使用RabbitMQ直接进行可能很容易,但使用MSMQ直接进行可能不太容易)
  • 消息幂等性
  • 依赖注入

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

总之,如果您仍在评估选项,您也可以查看我的FOSS项目: http://shuttle.github.io/shuttle-esb/

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


“使用服务总线可能会为您提供相当多的开箱即用功能,而直接针对队列进行编码可能需要一些工作才能开始。”非常好的概括。谢谢! - Chrysalis
使用MassTransit,在MSMQ上进行发布/订阅很容易。无论如何,这是在MSMQ上最容易的事情之一。 - stuartd
@stuartd:我的意思是,直接使用RabbitMQ进行发布/订阅非常容易,而直接使用MSMQ则不是。使用像shuttle-esb这样的服务总线确实可以让生活变得更轻松 :) - Eben Roux
@EbenRoux 没错,ServiceBus非常好用。你的回答意思不是很清楚。 - stuartd
@stuartd:我编辑了答案,使其更加清晰,谢谢。 - Eben Roux

4

我只是尝试过MassTransit,无法直接评论它。

我使用NServiceBus,并且很喜欢它。我认为直接使用排队技术有其有效的理由,但我认为使用MSMQ/RabbitMQ来制作自己的ESB成本比使用商业产品(或开源产品,如MassTransit)要高得多。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接