有没有办法在设置消费者时定义 Azure 服务总线 rule/filter?
Is there a way to define a Azure Service Bus rule/filter when setting up a consumer?
我正在探索在多租户系统中引入带有 MassTransit 的 Azure 服务总线时的选择。
基本上系统由几个服务组成,其中一些是特定于租户的,而另一些是共享的。
- 服务在内部保存数据(租户数据是隔离的)。
- 每个租户都运行同一组服务,只是它们自己的实例。
- 租户不应该消耗彼此的数据。
到目前为止,为每个租户创建一个单独的 Azure 服务总线命名空间似乎是最安全的选择,尽管它会使共享服务的使用变得复杂。
我考虑过使用 GreenPipe 过滤器,但由于这些过滤器在 cosnumer 级别上运行,据我所知,会有相当数量的消息刚刚到达队列并被丢弃。不过,我想我还是想使用租户过滤器来提高安全性。
我阅读了 Azure 服务总线中的主题过滤器概念。据我了解,它在订阅级别上运行,消息不会被复制到队列,除非它通过该过滤器。
目前,我这样设置我的消费者:
cfg.ReceiveEndpoint(host, "customer_update_queue", e =>
{
e.Consumer(() => new YourConsumer());
}
有没有办法在这里指定主题订阅过滤器?
(我也很高兴知道我是否忽略了其他选项)
如果您使用 SubscriptionEndpoint,您可以使用配置器指定规则和过滤器:
cfg.SubscriptionEndpoint(..., cfg => cfg.Rule)
如果您使用 ReceiveEndpoint,您可以手动订阅主题并指定 rule/filter:
configurator.ConfigureConsumeTopology = false;
configurator.Subscribe<PingMessage>("johnson", x =>
{
x.Rule = new RuleDescription();
x.Filter = new SqlFilter("SELECT ...");
});
我正在探索在多租户系统中引入带有 MassTransit 的 Azure 服务总线时的选择。
基本上系统由几个服务组成,其中一些是特定于租户的,而另一些是共享的。
- 服务在内部保存数据(租户数据是隔离的)。
- 每个租户都运行同一组服务,只是它们自己的实例。
- 租户不应该消耗彼此的数据。
到目前为止,为每个租户创建一个单独的 Azure 服务总线命名空间似乎是最安全的选择,尽管它会使共享服务的使用变得复杂。
我考虑过使用 GreenPipe 过滤器,但由于这些过滤器在 cosnumer 级别上运行,据我所知,会有相当数量的消息刚刚到达队列并被丢弃。不过,我想我还是想使用租户过滤器来提高安全性。
我阅读了 Azure 服务总线中的主题过滤器概念。据我了解,它在订阅级别上运行,消息不会被复制到队列,除非它通过该过滤器。
目前,我这样设置我的消费者:
cfg.ReceiveEndpoint(host, "customer_update_queue", e =>
{
e.Consumer(() => new YourConsumer());
}
有没有办法在这里指定主题订阅过滤器?
(我也很高兴知道我是否忽略了其他选项)
如果您使用 SubscriptionEndpoint,您可以使用配置器指定规则和过滤器:
cfg.SubscriptionEndpoint(..., cfg => cfg.Rule)
如果您使用 ReceiveEndpoint,您可以手动订阅主题并指定 rule/filter:
configurator.ConfigureConsumeTopology = false;
configurator.Subscribe<PingMessage>("johnson", x =>
{
x.Rule = new RuleDescription();
x.Filter = new SqlFilter("SELECT ...");
});