有没有办法在设置消费者时定义Azure服务总线规则/过滤器?

ing*_*ren 6 masstransit

在多租户系统中引入 Azure 服务总线和 MassTransit 时,我正在探索我的选择。

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

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

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

我考虑过使用 GreenPipe 过滤器,但由于它们在 cosnumer 级别上运行,据我了解,会有相当多的消息刚刚到达队列并被丢弃。但我想,为了额外的安全,我还是想使用租户过滤器。

我在 Azure 服务总线中了解了主题筛选器概念。据我了解,它在订阅级别上运行,并且消息不会被复制到队列,除非它通过该过滤器。

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

cfg.ReceiveEndpoint(host, "customer_update_queue", e =>
{
  e.Consumer(() => new YourConsumer());
}
Run Code Online (Sandbox Code Playgroud)

有没有办法在这里指定主题订阅过滤器?

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

Chr*_*son 5

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

cfg.SubscriptionEndpoint(..., cfg => cfg.Rule)
Run Code Online (Sandbox Code Playgroud)

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

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