在设置消费者时,是否有方法定义Azure服务总线规则/筛选器



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

基本上,该系统由几个服务组成,其中一些是租户专用的,而另一些是共享的。

  • 服务在内部保存数据(租户数据是孤立的)
  • 每个租户都运行相同的服务集,只是它们自己的实例
  • 租户永远不应该相互消耗数据

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

我曾考虑过使用GreenPipe过滤器,但由于这些过滤器是在cosnumer级别上操作的,据我所知,会有相当多的消息刚刚到达队列并被丢弃。然而,我想我还是想使用租户过滤器,以获得额外的安全性。

我在Azure服务总线中读到了有关主题过滤器概念的内容。据我所知,它在订阅级别上运行,除非通过该过滤器,否则消息不会被复制到队列中。

目前,我这样设置我的消费者:

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

有没有办法在这里指定主题订阅筛选器?

(如果我忽略了其他选项,我也很高兴知道)

如果使用SubscriptionEndpoint,则可以使用配置器指定规则和筛选器:

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

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

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

最新更新