【发布时间】:2016-04-26 12:17:28
【问题描述】:
我正在尝试使用 NServiceBus 实现发布-订阅通道。根据 Enterprise Integration Patterns 一书,推送订阅频道被描述为:
发布-订阅通道的工作方式如下:它有一个输入通道 分成多个输出通道,每个订阅者一个。 当一个事件被发布到频道中时,Publish-Subscribe 通道将消息的副本传递到每个输出通道。 通道的每个输出端只有一个订阅者,即 只允许消费一次消息。这样,每个订阅者 只收到一次消息,消费的副本从他们的 渠道。
霍普,格雷戈尔;伍尔夫,鲍比 (2012-03-09)。企业整合 模式:设计、构建和部署消息传递解决方案 (Addison-Wesley 签名系列(Fowler))(Kindle 位置 2880-2883)。培生教育。 Kindle 版。”
有一个包含发布者和订阅者的示例:http://docs.particular.net/samples/step-by-step/。我已经为版本 5 构建了示例解决方案。然后我在不同的命令行窗口中运行了多个订阅者,以查看系统的行为。
即使有多个订阅者,也只有一个订阅者会收到发布的事件。发布多个事件最多会导致一个订阅者处理该事件。
我找不到任何有关如何将 NServiceBus 配置为引用文本中定义的发布-订阅通道的信息。有谁知道如何做到这一点?不支持吗?
[2016 年 2 月 2 日更新]
复制订阅者后,我没有重命名端点。这给了我想要的行为。
【问题讨论】:
-
您可以为每个端点发布您的代码和单播总线配置吗?
-
代码在这里:docs.particular.net/samples/step-by-step/step-by-step.zip。我创建了另一个具有完全相同行为的基于 RabbitMQ 的版本。他们的官方样本具有相同的行为,所以我认为这可能是设计使然。
-
你应该能够有几个不同的类来实现 IHandleMessage
并且他们都应该得到它。这就是它一直以来的工作方式。这不需要额外的配置。 -
我发现我做错了什么:复制订阅者后我没有重命名端点。我将更新我的问题以反映这一点。
标签: c# nservicebus publish-subscribe message-passing eip