NServiceBus:订阅具有特定属性值的事件

时间:2016-11-17 16:28:27

标签: nservicebus

鉴于以下事件,有没有办法订阅具有特定属性值的事件?例如,仅订阅具有OperationTypeId = 3的事件。

public interface IServerEvent : IEvent
{
    int OperationTypeId { get; set; }
    string SomeValue { get; set; }
}

我正在使用NServiceBus 6.0.0。

这个用例是可以在服务器上创建新的OperationType,因此我们需要一个“通用”事件结构。我希望订阅者只能接收他们感兴趣的OperationType事件,并且不要求发布者将所有事件发送给所有订阅者并进行订阅者过滤。

我希望NServiceBus的发布方可以处理过滤器以减少发布的事件数量。

3 个答案:

答案 0 :(得分:4)

订阅活动的缺点是什么,只根据符合您标准的活动而忽略其余活动?

如果您控制着发布方,如果具有特定价值的事件对业务有意义,那么您是否需要打破该通用事件并发布更精细的事件?

至于为什么NServiceBus不支持基于内容的路由,也许this可能是原作者的好读物?

TL; DR "因为这是一种通常应该避免的危险模式"

答案 1 :(得分:1)

不是开箱即用 - 但如果您使用RabbitMq作为后端,则可以使用IRoutingTopology使用OperationTypeId的路由键路由这些特定消息。然后,您可以在订户上使用相同的拓扑来仅订阅特定的路由密钥

答案 2 :(得分:1)

布莱恩 以前的答案是正确的,通常您可以按类型或界面等区分不同的内容,并仅订阅该类型,以便发布者可以区分。

另一个想法可能是这些是事件吗?如果您遇到一个通用消息,其中内容无法强类型并且可以随时更改,您可能希望放弃基于内置类型的路由并自行管理消息调度。然后,您可以使用命令并调度它们,但是您希望在示例中使用OperationTypeId上的基于内容的路由器。

较新的版本6中仍然存在一些客户路由功能,可以为您提供一些潜在的灵活性:请参阅此文章和示例:https://docs.particular.net/samples/routing/custom/

此致 乔