rabbitmq - 为什么我们需要在 MSMQ/RabbitMQ 等消息队列系统之上使用 NService Bus/MassTransit 等服务总线框架?

标签 rabbitmq msmq nservicebus distributed-transactions masstransit

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

最佳答案

您当然可以直接针对消息传递基础架构进行编码,您会发现各有利弊。每次运输。但是,您需要在此过程中做出许多决定,而这正是服务总线可以提供帮助的地方。

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

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

  • 消息传递
  • 精确一次(分布式事务 - 并非所有排队系统都支持分布式事务)
  • 至少一次(非事务性)
  • 最多一次(可能需要一些事务处理,但您可以使用 没有分布式事务 )
  • 重试失败的消息
  • 请求/响应
  • 留言分发
  • 发布/订阅(直接使用 RabbitMQ 可能很容易,直接使用 MSMQ 就不太容易了)
  • 消息幂等
  • 依赖注入(inject)

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

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

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

    关于rabbitmq - 为什么我们需要在 MSMQ/RabbitMQ 等消息队列系统之上使用 NService Bus/MassTransit 等服务总线框架?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25953891/

    相关文章:

    node.js - 使用 Node.js 和 MSMQ 的最佳方式是什么?

    spring - 使用 Spring amqp 在 rabbitmq 中重新排队消息

    c# - 跨应用程序通信 (C#)

    c# - RabbitMQ C# 驱动程序停止接收消息

    C#。 MSMQ . 单条消息的最大尺寸

    azure - 使用 Azure Function Cosmos DB Changefeed 触发器使用 NServiceBus 发布消息

    log4net - NServiceBus 和 Log4Net 外部配置文件

    dependency-injection - 如何使用 NServiceBus 传奇执行构造函数注入(inject)?

    ruby-on-rails - 无法在 Linux 上安装 rabbitmq-server(Oracle Linux Server 版本 6.7/RHEL)

    python - 你应该在哪里更新 celery 设置?在远程 worker 或发件人?