gpt4 book ai didi

servicebus - 拓扑的澄清

转载 作者:行者123 更新时间:2023-12-04 05:30:27 28 4
gpt4 key购买 nike

我知道 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/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com