使用 Azure.Messaging.Servicebus 过滤主题/队列/订阅

问题描述 投票:0回答:1

我一直在构建一个在主要操作系统上运行的小型服务总线资源管理器工具,事实证明这在我的日常工作中很有用。该工具使用 Azure.Messaging.Servicebus nuget 包。其中一项功能是能够过滤队列/主题/订阅名称。支持服务器端过滤的旧版 SDK 包(前身)已被弃用,不幸的是当前的 SDK 不支持服务器端过滤,因此我不得不退回到客户端过滤。

不幸的是,我发现,如果命名空间有很多队列,例如(在我的例子中为+1900),AsyncPageable结果不提供一致的分页结果:返回的页面数和资源总数(例如队列)在后续运行中都不同,这使得搜索结果不一致。

我在 SDK 项目(Azure.Messaging.Servicebus)上提交了一个错误 https://github.com/Azure/azure-sdk-for-net/issues/40773,但得到的答复是这是一个服务器 -附带问题(如果确实存在问题)。

广泛使用的著名服务总线资源管理器不存在此问题,因为它使用较旧/已弃用的客户端,但仍允许服务器端过滤。

因此,作为最后的手段,我想知道 azure 服务总线上是否仍然有可用的 http / oData 端点,就像它们在旧版本 API 中一样。我发现很难找到有关这些端点的一些文档,但也许我遗漏了一些东西。

有谁能给我一些提示,让我在哪里可以找到一些文档,或者对另一种方法进行过滤的建议(除了回退到旧的已弃用的 SDK 版本之外)?

azureservicebus
1个回答
0
投票

自从创建遗产以来,Azure 的资源管理策略发生了变化,重点是在客户端库(数据平面)和管理库(基于 ARM)之间划分职责。这样做的目的是为了实现更精细的权限管理和更严格的安全模型。因此,服务总线 AMQP API 中没有用于实体管理的等效 API 接口。

通过 ARM 进行管理(推荐)

对于您的场景,使用管理包,Azure.ResourceManager.ServiceBus 将是推荐的方法。该包直接与 ARM 交互,这就是 Azure 本身管理资源(包括 Azure 门户)的方式。该 API 应该更加稳定,并且应该提供更加一致的结果。它也正在积极开发中,并且仍在投资。您发现的任何错误都更有可能在此 API 中得到解决,而不是在替代方案中得到解决。

通过 ATOM 进行管理(通常有效)

当前一代服务总线客户端库

Azure.Messaging.ServiceBus
通过使用较旧的 基于 ATOM 的 API 来解决数据/管理平面限制,该 API 允许使用数据平面权限管理服务总线实体。然而,该 API 的存在是出于兼容性原因,并不是正在积极开发的东西。它有一些怪癖,主要适用于应用程序需要动态创建队列/主题/订阅的场景。

通过 SBMP 进行管理(坏主意)

旧版包使用已弃用的 SBMP 协议,该协议是基于 WCF 的本土协议。我不知道存在任何官方协议文档。鉴于它是计划退休,使用它并不是一个可行的长期解决方案。

© www.soinside.com 2019 - 2024. All rights reserved.