【问题标题】:Filter data before sending it to a subscriber (NServiceBus)在将数据发送给订阅者之前过滤数据 (NServiceBus)
【发布时间】:2011-09-04 07:24:00
【问题描述】:

我有许多客户需要在将新数据添加到我们的一个数据库表时得到通知。 我考虑创建一个服务,该服务每 X 秒检查一次表,并在存在任何新数据时通知客户端。问题是,每个客户端都有不同的权限,不能看到所有的信息。我想过使用 NServiceBus 之类的东西来发布带有新信息的消息,但是在发送之前我需要根据每个客户端的权限过滤信息。需要在发送信息之前进行过滤(我不允许在客户端执行过滤)。

NServiceBus 中是否有对此的内置支持?

如果没有,我该如何实现这个目标?

编辑: 这是我在下面的评论中写的一个例子: 说我有一个图书馆。每个客户都有兴趣立即收到有关添加到图书馆的新书的通知,但每个客户只能收到有关特定类型的通知。系统应该向所有包含新书信息的客户端发送通知,但每个客户端应该只被通知他的特定类型。出于安全原因,我无法过滤客户端中的数据。

谢谢。

【问题讨论】:

  • 是否有对类似数据感兴趣的客户群?还是每个客户都在寻找不同的套装?客户和数据是否属于同一个业务组件(营销与计费)?
  • 所有客户端都应根据其在 AD 中的组收到添加到表中的数据子集。除此之外,客户之间没有区别。我会尝试更具体一点:添加到表中的每个实体都有一个组属性,并且每个客户端只能看到其中的一些组。
  • 例如:假设我有一个图书馆。每个客户都有兴趣接收关于添加到图书馆的新书的立即通知,但每个客户只被允许收到关于特定类型的通知。系统应该向所有包含新书信息的客户端发送通知,但每个客户端应该只被通知他的特定类型。出于安全原因,我无法过滤客户端中的数据。

标签: c# .net soa nservicebus servicebus


【解决方案1】:

一个潜在的选择是只允许某些客户订阅他们被允许看到的类型。 NSB 提供 IAuthorizeSubscriptions 接口以允许您确定允许谁订阅消息。通过按类型拆分消息,您可以使用授权界面允许/拒绝订阅这些类型。

【讨论】:

  • 感谢您的评论...我想过这个选项,但问题是“流派”是动态的,可以随时添加/删除。
  • 我认为您将不得不根据您的自定义标准(基本上是消息检查器)模仿发布功能和调度(Bus.Send())。为方便起见,您可以将其包装到基类中。
  • 您将使用与 NSB 相同的方法,查询存储(通常是具有单个表的数据库)。他们都可以订阅相同的消息,您只需要预先自行过滤掉即可。
  • 我明白你的意思,但我似乎找不到如何查询订阅者存储(除非你在谈论不使用框架的情况下查询它)。可以给个代码示例吗?
  • 当然,您可以使用框架,只需向容器请求 ISubscriptionStorage 的实例,例如 s = Bus.Builder.Build()。然后你可以调用 s.GetSubscribersForMessage()...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多