【问题标题】:Is it possible to scope/group event publishers in NServiceBus?是否可以在 NServiceBus 中对事件发布者进行范围/分组?
【发布时间】: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 维基:

订阅者表示对一个或多个类感兴趣,并且只接收感兴趣的消息,而不知道有哪些发布者(如果有的话)

问题

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

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

  3. 是否可以对发布者进行范围/分组,以便只有一种事件类型 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


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

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

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

【讨论】:

  • 我们有一个场景,我们有一个通用的服务实现,每个实例都有自己的一组感兴趣的订阅者。此外,我们希望标记事件,以便只有特定订阅者才能接收事件。
【解决方案2】:

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

当您设置每个发布者的IEndpointInstance

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

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

【讨论】:

    猜你喜欢
    • 2013-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-01
    相关资源
    最近更新 更多