设置使用者时,是否可以定义Azure Service Bus规则/筛选器?

时间:2019-02-03 21:19:16

标签: masstransit

在多租户系统中引入带有MassTransit的Azure Service Bus时,我正在探索自己的选择。

该系统基本上由几个服务组成,其中一些服务是特定于租户的,而某些则是共享的。

  • 服务在内部保留数据(租户数据是隔离的)。
  • 每个租户都运行相同的服务集,只是它们自己的实例。
  • 租户永远不要消耗彼此的数据。

到目前为止,为每个租户创建一个单独的Azure Service Bus命名空间似乎是最安全的选择,尽管它会使共享服务的使用变得复杂。

我已经考虑过使用GreenPipe过滤器,但是由于这些过滤器在余弦级别上运行,据我了解,将有相当数量的消息刚刚到达队列并被丢弃。但是我认为我还是想使用租户过滤器以提高安全性。

我阅读了Azure Service Bus中的主题筛选器概念。据我了解,它在订阅级别上运行,除非通过该过滤器,否则消息不会复制到队列中。

目前,我的消费者设置如下:

cfg.ReceiveEndpoint(host, "customer_update_queue", e =>
{
  e.Consumer(() => new YourConsumer());
}

是否可以在此处指定主题订阅过滤器?

(我也很高兴知道我是否忽略了其他选择)

1 个答案:

答案 0 :(得分:1)

如果使用SubscriptionEndpoint,则可以使用配置程序指定规则和过滤器:

cfg.SubscriptionEndpoint(..., cfg => cfg.Rule)

如果使用ReceiveEndpoint,则可以手动订阅主题并指定规则/过滤器:

configurator.SubscribeMessageTopics = false;
configurator.Subscribe<PingMessage>("johnson", x =>
{
    x.Rule = new RuleDescription();
    x.Filter = new SqlFilter("SELECT ...");
});