我正在尝试通过MSMQ配置MassTransit。我需要使用订阅服务,因为我不能使用Multicast,因为:
我不明白为什么系统的设计使得如果订阅服务没有运行,则无法初始化总线实例。延迟一段时间后,您将获得“Timeout等待订阅服务响应”。
我认为这违背了消息排队的想法,消息一直保持到接收器可用。我认为与订阅服务的通信是通过mt_subscriptions队列完成的,启动不依赖于正在运行的订阅服务。
答案 0 :(得分:1)
最有可能发生的事情是消息被添加到队列中,就像您怀疑的那样,但错误处理会吐出该特定错误消息,因为它知道期望另一端的订阅服务。也许您无法初始化总线实例的原因是因为它没有检测到总线另一端的其他内容(订阅服务),因此它不会发送消息。
订阅服务可能充当中间人并确定何时/何地发送消息。因此,需要运行订阅服务,以便在mt_subscriptions中对消息进行排队而不会出错。
答案 1 :(得分:1)
因此订阅服务是您持久化和管理订阅的方式。如果它没有运行,那么就无法告诉消息它应该被路由到哪里。它也是唯一存储订阅的地方。如果需要,可以进行静态路由,手动配置所有内容。但在一天结束时,MSMQ需要额外的pub / sub基础设施。没有办法解决这个问题。
你看到超时的原因是,当MT启动时它会说"嘿,我在这里,这是我的消费者。他们在公共汽车上的其他消费者是什么?"因此,订阅服务需要及时响应以获取该信息。如果没有注册订阅,那并不是该消息只是帮助 - 它已经丢失了。
如果您想要更轻松的事情,那么您必须选择RabbitMQ。您不会需要运行订阅服务,因为RMQ中的交换绑定会为您处理。