servicebus - 拓扑澄清

标签 servicebus rebus

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

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

最佳答案

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

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

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())
    (...)

关于servicebus - 拓扑澄清,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12691886/

相关文章:

Rebus 断路器的实现?

azure - 同一消息的多个订阅者 Rebus Azure 服务总线

ravendb - Rebus 和 RavenDB

c# - 通知消息的所有消费者

azure - 将过期的死信消息重新提交回队列

powershell - 获取变量 Powershell 中资源组的位置值

jquery - 从网络/TCP/HTTP 连接的角度来看,Node.js 是如何工作的? WCF 可以模拟这个吗?

c# - 如何修复仅限于从Azure ServiceBus读取1个客户端的问题

rebus - 使用 Rebus 时删除重复消息

azure - ConnectionStatusBehavior 和 RelayBinding