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

时间:2016-07-06 19:18:35

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

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

当:
- SUB显式订阅PUB1,队列名称仅为QUEUE1

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

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

接收MyEvent 预期


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

来自NSB wiki:

  

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

问题

  1. 在上面显示的AddPublisher方法中指定发布商端点的重点是什么? Azure表存储中的订阅表仅包含事件类型和订阅者列,不存储发布者端点。

  2. 如果AddPublisher是一种过时的方法,那么endpointInstance.Subscribe<MyEvent>()就会失败 - 它会说&#34;找不到发布商&#34;。

    < / LI>
  3. 是否可以对发布商进行范围/分组,以便只有一个事件类型MyEvent,订阅者将从仅使用相同队列名称创建的发布者接收该事件?
    例如。你用QUEUE-A创建PUB1,用队列QUEUE-A创建PUB2,用QUEUE-B创建PUB3,用AddPublisher创建SUB到QUEUE-A,这样SUB就不会从PUB3接收MyEvent(QUEUE- B)。

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

2 个答案:

答案 0 :(得分:3)

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

  2. AddPublisher()不是一个过时的方法。废弃的消息将被标记为这样。说到这一点,路由功能仍然可以在我们现在进入的测试阶段进行修改。

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

答案 1 :(得分:1)

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

当您设置每个发布商IEndpointInstance

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

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