是否可以 scope/group NServiceBus 中的事件发布者?

Is it possible to scope/group event publishers in NServiceBus?

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

时间:
- SUB 明确订阅队列名称为 QUEUE1 的 PUB1 only

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

结果:
- SUB 还从 PUB2(具有队列名称 QUEUE2)

接收 MyEvent

预计:
- SUB 不应从 PUB2 接收 MyEvent,因为它未订阅该发布者队列名称

来自 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 Table 存储中的订阅 table 只有事件类型和订阅者列,未存储发布者端点。

  2. 如果 AddPublisher 是某种过时的方法,那么 endpointInstance.Subscribe<MyEvent>() 就会失败 - 它说 "no publishers could be found".

  3. 是否有可能 scope/group 发布者只有一种事件类型 MyEvent 订阅者将从仅使用相同队列名称创建的发布者接收事件?
    例如。您使用 QUEUE-A 创建 PUB1,使用队列 QUEUE-A 创建 PUB2,使用 QUEUE-B 创建 PUB3,并使用 AddPublisher 到 QUEUE-A 创建 SUB,因此 SUB 不会从 PUB3(QUEUE- B).

我正在使用:
NServiceBus 6.0.0-beta0004
NServiceBus.Persistence.AzureStorage1.0.0-beta0004
NServiceBus.Azure.Transports.WindowsAzureStorageQueues7.0.0-beta0004

除了自己的队列之外,每个发布者还需要自己的持久性 Table。

当您设置每个发布商的 IEndpointInstance:

busConfiguration
   .UsePersistence<AzureStoragePersistence, StorageType.Subscriptions>()
   .TableName("NameOfPublisher")

有关详细信息,请参阅文档:http://docs.particular.net/nservicebus/azure-storage-persistence/configuration

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

  2. AddPublisher() 不是过时的方法。过时的消息将被标记为这样。话虽如此,我们现在处于测试阶段,路由功能仍然可以修改。

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