我正在尝试通过 MSMQ 配置 MassTransit。我需要使用订阅服务,因为我无法使用多播,因为:
- 我正在通过超过 1 个子网进行通信,并且
- 我需要持久订阅
我不明白的是,为什么系统设计为如果订阅服务未运行,则无法初始化总线实例。延迟后,您会收到“等待订阅服务响应超时”。
我认为这违背了消息队列的理念,即消息将一直保留到接收者可用为止。我认为与订阅服务的通信是通过 mt_subscriptions 队列完成的,并且启动不会依赖于订阅服务的运行。
最佳答案
因此,订阅服务是您保存和管理订阅的方式。如果它没有运行,那么就无法告诉消息应该路由到哪里。它也是存储订阅的唯一位置。如果需要,您可以执行静态路由,手动配置所有内容。但归根结底,MSMQ 需要额外的发布/订阅基础设施。没有办法解决这个问题。
您看到超时的原因是,当 MT 启动时,它会说“嘿,我在这里,这是我的消费者。他们是公交车上的其他消费者吗?”因此订阅服务需要及时响应以取回该信息。如果没有注册订阅,则该消息并不只是提供帮助 - 它会丢失。
如果您想要更简单的东西,您必须使用 RabbitMQ。您不需要运行订阅服务,因为 RMQ 中的交换绑定(bind)会为您处理这些事情。
关于msmq - MassTransit 的订阅服务存在单点故障,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23835001/