是否可以 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
问题:
在上面显示的 AddPublisher
方法中指定发布者端点有什么意义? Azure Table 存储中的订阅 table 只有事件类型和订阅者列,未存储发布者端点。
如果 AddPublisher
是某种过时的方法,那么 endpointInstance.Subscribe<MyEvent>()
就会失败 - 它说 "no publishers could be found".
是否有可能 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
Azure 存储队列传输支持 pub/sub using persistence。需要指定发布者端点以允许订阅者在启动时发送订阅消息。默认情况下,所有端点都使用相同的共享存储 table,这就是您遇到所描述内容的原因。如果您将订阅拆分为每个端点(每个端点都有自己的存储 table),您会看到 SUB 只会从 PUB1 接收事件,如果它是它订阅的唯一发布者的话。
AddPublisher()
不是过时的方法。过时的消息将被标记为这样。话虽如此,我们现在处于测试阶段,路由功能仍然可以修改。
可以按照 Philip 概述的方式来确定范围。同时,我鼓励研究为什么您有两个不同的端点生成相同的事件。通常,您希望事件是唯一的并由单个端点(或所有实例)引发,而不是两个或更多不同的端点。
我有:
- 一个订阅者 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
问题:
在上面显示的
AddPublisher
方法中指定发布者端点有什么意义? Azure Table 存储中的订阅 table 只有事件类型和订阅者列,未存储发布者端点。如果
AddPublisher
是某种过时的方法,那么endpointInstance.Subscribe<MyEvent>()
就会失败 - 它说 "no publishers could be found".是否有可能 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
Azure 存储队列传输支持 pub/sub using persistence。需要指定发布者端点以允许订阅者在启动时发送订阅消息。默认情况下,所有端点都使用相同的共享存储 table,这就是您遇到所描述内容的原因。如果您将订阅拆分为每个端点(每个端点都有自己的存储 table),您会看到 SUB 只会从 PUB1 接收事件,如果它是它订阅的唯一发布者的话。
AddPublisher()
不是过时的方法。过时的消息将被标记为这样。话虽如此,我们现在处于测试阶段,路由功能仍然可以修改。可以按照 Philip 概述的方式来确定范围。同时,我鼓励研究为什么您有两个不同的端点生成相同的事件。通常,您希望事件是唯一的并由单个端点(或所有实例)引发,而不是两个或更多不同的端点。