msmq - MassTransit 的订阅服务存在单点故障

标签 msmq soa masstransit

我正在尝试通过 MSMQ 配置 MassTransit。我需要使用订阅服务,因为我无法使用多播,因为:

  • 我正在通过超过 1 个子网进行通信,并且
  • 我需要持久订阅

我不明白的是,为什么系统设计为如果订阅服务未运行,则无法初始化总线实例。延迟后,您会收到“等待订阅服务响应超时”。

我认为这违背了消息队列的理念,即消息将一直保留到接收者可用为止。我认为与订阅服务的通信是通过 mt_subscriptions 队列完成的,并且启动不会依赖于订阅服务的运行。

最佳答案

因此,订阅服务是您保存和管理订阅的方式。如果它没有运行,那么就无法告诉消息应该路由到哪里。它也是存储订阅的唯一位置。如果需要,您可以执行静态路由,手动配置所有内容。但归根结底,MSMQ 需要额外的发布/订阅基础设施。没有办法解决这个问题。

您看到超时的原因是,当 MT 启动时,它会说“嘿,我在这里,这是我的消费者。他们是公交车上的其他消费者吗?”因此订阅服务需要及时响应以取回该信息。如果没有注册订阅,则该消息并不只是提供帮助 - 它会丢失。

如果您想要更简单的东西,您必须使用 RabbitMQ。您不需要运行订阅服务,因为 RMQ 中的交换绑定(bind)会为您处理这些事情。

关于msmq - MassTransit 的订阅服务存在单点故障,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23835001/

相关文章:

c# - 发送到远程 MSMQ 静默失败

.net - 在 WCF 应用程序中使用 MSMQ 消息时保留消息顺序

c# - 将参数作为 Xml 传递给存储过程

c# - 在面向服务的架构 (SOA) 中,每个服务都应该拥有自己的数据吗?

masstransit - 处理多个事件的状态转换

c# - Nservicebus 传奇超时

c# - WCF MsmqIntegrationBinding - 未拾取某些 XML 消息

architecture - 具有多个数据源的工作单元?

c# - 如何覆盖 MassTransit 默认交换和队列拓扑约定?

c# - 如何在 ASP.NET Core Web API 中使用 MassTransit 事件总线?