澄清拓扑

时间:2012-10-02 14:08:17

标签: servicebus rebus

据我所知,Rebus完全能够将消息从A点传输到B(使用MSMQ作为传输层)。为了使事情清楚,Rebus还能够进行一对多的消息传递,即从A点发送的消息应该在B点和C点结束?

如果有可能,它是如何做到的?我看不到任何集中式分发站点(邮局),因此我假设通信将包含从每个端点到每个其他端点的通道(因此,在进程必须与其他5个端点进行通信的网络中,将是5个通道,从这个过程中散发出来)。你能证实这个假设吗?

1 个答案:

答案 0 :(得分:3)

是的,Rebus确实能够向几乎任何数量的订阅者发布消息。确实,MSMQ(至少在其最基本的操作模式下)是一个简单的点对点通道,这就是为什么在顶层有一个层来实现真正的pub / sub。

它的工作方式是,每个订户都有一个指向发布者的端点映射,然后每个订阅者

bus.Subsribe<SomethingInterestingHappened>();

会导致发布者发送内部SubscriptionMessage。然后,发布者必须记住订阅每种给定消息类型的人,通常是将此信息存储在SQL Server中。所有这些都是自动发生的,它只需要您配置某种订阅存储。

然后,当发布内容时,发布者会

bus.Publish(new SomethingInterestingHappened { ... });

这将使Rebus查找给定消息类型的所有订阅者。这可能是0,1或更多,然后事件将被发送到每个订户的输入队列。

您可以在page about routing上的Rebus文档中详细了解这些内容。

为了向您提供有关如何配置订阅者和发布者的提示,请查看此信息 - 这是订阅者:

Configure.With(...)
    .Transport(t => t.UseMsmq....)
    .MessageOwnership(t => t.FromRebusConfigurationSection())
    (...)

还有一个端点映射,可将一堆事件映射到特定的发布者:

<endpoints>
    <add messages="SomePublisher.Messages" endpoint="publisher_input_queue" />
</endpoint>

然后发布商可能如下所示:

Configure.With(...)
    .Transport(t => t.UseMsmq....)
    .Subscriptions(s => s.StoreInSqlServer(theConnectionString, "subscriptions")
                         .EnsureTableIsCreated())
    (...)