在 Azure functions Python SDK 中,如何获取给定命名空间的主题数?

In the Azure functions Python SDK, how do I get the number of topics for a given namespace?

我正在使用 Python 3.8 和 azure-mgmt-servicebus= v.1.0.0。我想获取给定命名空间的主题数。我试过以下...

credential = ServicePrincipalCredentials(self._client_id, self._client_secret, tenant=self._tenant)
        sb_client = ServiceBusManagementClient(credential, self._subscription)
         ...
        topics = sb_client.topics.list_by_namespace(
                resource_group_name=self._resource_group_name,
                namespace_name=namespace
            )
            num_topics = 0
            while topics.current_page:
                num_topics += topics.current_page.count
                topics.next
            logging.info("num topics: %s", num_topics)

我的“num_topics”总是返回零,尽管事实上我已经验证了我的连接正在建立(我可以创建一个具有相同连接的主题)并且我可以看到很多主题在 Azure 门户中提供信息。我在想我没有正确使用 API 但我不确定哪里出了问题。如何获取给定命名空间的主题数?

如果您想获取给定服务总线命名空间的主题数,可以使用以下代码。

from azure.common.credentials import ServicePrincipalCredentials
from azure.mgmt.servicebus import ServiceBusManagementClient

subscription_id = "<subscription-id>"
rg_name = "<resource-group-name>"

tenant_id = "<tenant-id>"
client_id = "<client-id>"
client_secret = "<client-secret>"

credential = ServicePrincipalCredentials(client_id=client_id, secret=client_secret, tenant=tenant_id)
sb_client = ServiceBusManagementClient(credential, subscription_id)
topics = sb_client.topics.list_by_namespace(resource_group_name= rg_name, namespace_name= "servicebusname")

num_topics = 0
for topic in topics:
    num_topics += 1
print(num_topics)

检查门户中的主题,结果正确:

更新:

如果不想使用循环,可以将 topics 转换为列表,然后使用 len() 函数。

from azure.common.credentials import ServicePrincipalCredentials
from azure.mgmt.servicebus import ServiceBusManagementClient

subscription_id = "<subscription-id>"
rg_name = "<resource-group-name>"

tenant_id = "<tenant-id>"
client_id = "<client-id>"
client_secret = "<client-secret>"

credential = ServicePrincipalCredentials(client_id=client_id, secret=client_secret, tenant=tenant_id)
sb_client = ServiceBusManagementClient(credential, subscription_id)
topics = sb_client.topics.list_by_namespace(resource_group_name= rg_name, namespace_name= "servicebusname")

testlist = list(topics)
print(len(testlist))