我有:
-一个订阅者SUB与QUEUE0-
发布者PUB1与QUEUE1-
发布者PUB2与QUEUE2-
事件MyEvent
由两个发布者发布
在以下情况下:
-SUB仅使用队列名称QUEUE1明确订阅PUB1
subscriberEndpointConfiguration.UnicastRouting().AddPublisher("PUB1", typeof(MyEvent));
结果:-SUB
也MyEvent
从PUB2接收(队列名称为QUEUE2)
预期:
-SUB不应MyEvent
从PUB2接收,因为它未订阅该发布者队列名称
从NSB Wiki:
订阅者对一个或多个类表示兴趣,并且仅接收感兴趣的消息,而不知道那里有什么发布者
问题:
在AddPublisher
上面显示的方法中指定发布者终结点有什么意义?Azure表存储中的订阅表具有事件类型和仅订阅者列,未存储发布者终结点。
如果AddPublisher
是某种过时的方法,则endpointInstance.Subscribe<MyEvent>()
简单地失败-它说“找不到发布者”。
是否可以对发布者进行范围/分组,以便只有一种事件类型MyEvent
,订阅者才能从仅使用相同队列名创建的发布者那里收到该事件?
例如,您创建带有QUEUE-A的PUB1,带有队列QUEUE-A的PUB2,带有QUEUE-B的PUB3和带有AddPublisher
QUEUE-A的SUB,因此SUB不会MyEvent
从PUB3接收(QUEUE-B)。
我正在使用:
NServiceBus 6.0.0-beta0004
NServiceBus.Persistence.AzureStorage 1.0.0-beta0004
NServiceBus.Azure.Transports.WindowsAzureStorageQueues 7.0.0-beta0004
Azure存储队列传输使用持久性支持pub / sub。在那里需要指定发布者终结点,以允许订阅者在启动时发送订阅消息。默认情况下,所有端点都使用相同的共享存储表,这就是为什么您要体验自己描述的原因。如果按每个端点(每个端点都有自己的存储表)拆分订阅,则您将看到SUB仅从PUB1接收到一个事件,前提是它是唯一订阅的发布者。
AddPublisher()
这不是一种过时的方法。已过时的消息将被标记为原样。话虽如此,路由功能仍然可以在我们目前处于测试阶段的阶段进行修改。
可以按照Philip概述的方式进行作用域确定。同时,我鼓励研究一下为什么您有两个不同的端点生成同一事件。通常,您希望事件是唯一的,并由单个端点(或所有实例)引发,但不要由两个或多个不同的端点引发。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句