nservicebus - 是否可以在 NServiceBus 中对事件发布者进行范围/分组?

标签 nservicebus azure-table-storage publisher subscriber azure-storage-queues

我有:
- 一个带有 QUEUE0 的订阅者 SUB
- 发布者 PUB1 与 QUEUE1
- 发布商 PUB2 与 QUEUE2
- 事件MyEvent由两家出版商出版

时间:
- SUB 仅显式订阅队列名称为 QUEUE1 的 PUB1

subscriberEndpointConfiguration.UnicastRouting().AddPublisher("PUB1", typeof(MyEvent));

结果:
- SUB 还收到 MyEvent来自 PUB2(队列名称为 QUEUE2)

预期:
- SUB 不应收到MyEvent来自 PUB2,因为它没有订阅该发布者队列名称

来自 NSB 维基:

subscribers express interest in one or more classes, and only receive messages that are of interest, without knowledge of what, if any, publishers there are

问题:

  1. AddPublisher中指定发布者端点有什么意义?上面显示的方法? Azure 表存储中的订阅表只有事件类型和订阅者列,不存储发布者端点。

  2. 如果 AddPublisher是某种过时的方法,那么endpointInstance.Subscribe<MyEvent>()根本就失败了 - 它说“找不到发布者”。

  3. 是否可以对发布商进行范围/分组,以便只有一种事件类型 MyEvent订阅者将收到来自仅使用相同队列名称创建的发布者的事件?
    例如。您使用 QUEUE-A 创建 PUB1,使用队列 QUEUE-A 创建 PUB2,使用 QUEUE-B 创建 PUB3,使用 AddPublisher 创建 SUB到 QUEUE-A,因此 SUB 不会收到 MyEvent来自 PUB3 (QUEUE-B)。

我正在使用:
NServiceBus 6.0.0-beta0004
NServiceBus.Persistence.AzureStorage 1.0.0-beta0004
NServiceBus.Azure.Transports.WindowsAzureStorageQueues 7.0.0-beta0004

最佳答案

  1. Azure 存储队列传输支持pub/sub using persistence 。需要指定发布者端点,以允许订阅者在启动时发送订阅消息。默认情况下,所有端点都使用相同的共享存储表,这就是您遇到所描述的情况的原因。如果您将每个端点的订阅分开(每个端点都有自己的存储表),您会发现 SUB 只会从 PUB1 接收事件(如果 PUB1 是它订阅的唯一发布者)。

  2. AddPublisher() 不是一个过时的方法。过时的消息将被标记为此类。尽管如此,在我们目前所处的测试阶段,路由功能仍然可以修改。

  3. 范围界定可以按照 Philip 概述的方式完成。同时,我鼓励您研究为什么有两个不同的端点生成相同的事件。通常,您希望事件是唯一的并由单个端点(或所有实例)引发,而不是由两个或多个不同端点引发。

关于nservicebus - 是否可以在 NServiceBus 中对事件发布者进行范围/分组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38232098/

相关文章:

c# - TransactionScopeOptions.Suppress 超时

c# - 我的 Saga 结构是正确的解决方案吗? (N服务总线)

c# - 扩展方法中的 Azure 存储表 ExecuteQuerySegmentedAsync 调用错误

c# - 如何在 C# 中构建通用方法来查询给定 Azure 表中的分区

url - 如何对 URI 进行编码以安全地存储在 TableServiceEntity 的 RowKey 中?

java - 了解自定义指标发布者如何在hystrix上工作

user-interface - N服务总线/CQRS : How to handle things in the userinterface?

.net - Enterprise Service Bus、.NET Service Bus、NServiceBus 和总线上的轮子

sql-server - SQL Server 复制订阅者过滤器

zeromq - zeromq 中的懒惰发布/订阅,仅获取最后一条消息