Azure 服务总线 - 多个主题与筛选主题

Azure Service Bus - Multiple Topics vs Filtered Topic

我已经使用多个应用程序订阅的主题将 azure 服务总线的实现编写到我们的应用程序中。我们团队中的一个讨论是,我们是坚持使用单个主题并通过消息的属性进行过滤,还是为我们的特定需求创建一个主题。

我们的场景是希望按优先级和环境变量进行过滤(测试和 uat 环境共享一个连接)。

所以我们有主题(类似):

,只是将这些值设置为两个属性的单个主题?

我的偏好是我们创建单独的主题,因为我们将利用可用的功能,我想在高负载下这会更好地扩展?我读过偷看大队列可能效率低下。订阅单个主题似乎也更干净。

如有任何建议,我们将不胜感激。

这两种方法都有效。更多的主题和订阅意味着您在部署时有更多的实体需要管理。如果 High/Medium/Low 反映优先级,那么多个主题可能是更好的选择,因为您可以首先从最高优先级订阅中提取。

从可伸缩性的角度来看,您确实不会注意到太多差异,因为服务总线已经在内部将负载分散到多个日志中,因此如果您使用六个主题或两个主题,则不会 material 区别。

影响性能可预测性的是服务的选择class。如果您选择 "Standard",吞吐量和延迟是共享 multi-tenant 基础设施的最大努力。同一集群上的其他租户可能会影响您的吞吐量。 If you choose "Premium",您将获得可提供可预测性能的 ringfenced 资源,并且您的两个或六个主题将从该资源池中处理。

我会为每个环境选择不同的主题。它更干净。可以针对每个环境单独监视主题中的消息计数。它的可扩展性略强(例如,不会共享主题大小限制)- 但限制很慷慨,在测试中并不重要。

但我的主要论点是:这就是制作(希望)进行的方式。就像在 ASB 中一样,生产将拥有自己的连接(和名称空间),并且将拥有单独的主题。因此,您不会在生产中通过属性过滤消息,那么为什么在测试中采用不同的方式呢?

最后提示:为了更轻松地提供主题,我建议让您的应用程序在启动时自动创建它们。这很容易做到 - 检查它们是否存在,如果不存在则创建。