【发布时间】:2016-07-06 19:18:34
【问题描述】:
我有:
- 一个带有 QUEUE0 的订阅者 SUB
- 发布者 PUB1 与 QUEUE1
- 发布者 PUB2 与 QUEUE2
- 事件MyEvent 由两个发布者发布
时间:
- SUB 仅使用队列名称 QUEUE1 显式订阅 PUB1
subscriberEndpointConfiguration.UnicastRouting().AddPublisher("PUB1", typeof(MyEvent));
结果:
- SUB 还接收来自 PUB2(队列名称为 QUEUE2)的MyEvent
预期:
- SUB 不应收到来自 PUB2 的 MyEvent,因为它没有订阅该发布者队列名称
来自 NSB 维基:
订阅者表示对一个或多个类感兴趣,并且只接收感兴趣的消息,而不知道有哪些发布者(如果有的话)
问题:
在上面显示的
AddPublisher方法中指定发布者端点有什么意义? Azure 表存储中的订阅表只有一个事件类型和一个订阅者列,不存储发布者端点。如果
AddPublisher是某种过时的方法,那么endpointInstance.Subscribe<MyEvent>()就会失败 - 它说“找不到发布者”。是否可以对发布者进行范围/分组,以便只有一种事件类型
MyEvent订阅者将接收来自仅使用相同队列名称创建的发布者的事件?
例如。您使用 QUEUE-A 创建 PUB1,使用队列 QUEUE-A 创建 PUB2,使用 QUEUE-B 创建 PUB3,使用AddPublisher创建 SUB 到 QUEUE-A,因此 SUB 不会从 PUB3 (QUEUE-B) 收到MyEvent。
我正在使用:
NServiceBus 6.0.0-beta0004
NServiceBus.Persistence.AzureStorage 1.0.0-beta0004
NServiceBus.Azure.Transports.WindowsAzureStorageQueues 7.0.0-beta0004
【问题讨论】:
-
Pub1 和 Pub2 是否都使用相同的
IEndpointInstance? (基本上在同一个主机)。他们是否使用相同的持久性配置:busConfiguration.UsePersistence<AzureStoragePersistence, StorageType.Subscriptions>().TableName("tableName")?我认为每个发布者不仅需要它自己的队列(接收即将到来的订阅消息),还需要它自己的持久性表来存储订阅。我不认为发布者可以共享一个表而不流血。
标签: nservicebus azure-table-storage publisher subscriber azure-storage-queues