Azure ServiceBus:程序化创建队列共享访问策略

-1 投票
1 回答
81 浏览
提问于 2025-04-14 16:52

我需要用Python在Azure ServiceBus中创建一些实体。

创建一个队列非常顺利:

adminClient.create_queue('<name>', default_message_time_to_live='P8D', uplicate_detection_history_time_window='PT1H', lock_duration='PT1M', max_delivery_count=100, max_size_in_megabytes=4096, max_message_size_in_kilobytes=256)

这个队列创建的时候没有共享访问策略,所以我也想在代码中做到这一点:

adminClient.create_queue('<name>', authorization_rules=[ AuthorizationRule(type='SharedAccessPolicy',key_name='...',rights=[ 'Send' ]) ], default_message_time_to_live='P8D', uplicate_detection_history_time_window='PT1H', lock_duration='PT1M', max_delivery_count=100, max_size_in_megabytes=4096, max_message_size_in_kilobytes=256)

运行这段代码时出现了azure.core.exceptions.HttpResponseError: SubCode=50000. Internal Server Error的错误。我甚至不知道SharedAccessPolicy作为type是否正确。我尝试添加了primary_Key='...'secondary_key='...',但结果还是一样。

我知道有一份文档在这里:https://azuresdkdocs.blob.core.windows.net/$web/python/azure-servicebus/latest/azure.servicebus.management.html#azure.servicebus.management.AuthorizationRule,但这并没有真正帮助我。

我遗漏了什么呢?

1 个回答

0

这个方法对我有效。

我使用了来自 azure-mgmt-servicebus 包的 azure.mgmt.servicebus

如果需要参考,可以查看这个 文档

我的代码:

app.py:

from azure.mgmt.servicebus import ServiceBusManagementClient
from azure.identity import DefaultAzureCredential


credentials = DefaultAzureCredential()
sub_id = "xxxxxxxxxxxxxxxxxxxx"
resource_group = "xxxxxxxxxxxxxx"
client = ServiceBusManagementClient(credential=credentials,subscription_id=sub_id)

#create queue
client.queues.create_or_update(resource_group,"pysdksb","sdkqueue",parameters={"properties":{"enablePartitioning": True}})

# create an authorization rules in created queue.
client.queues.create_or_update_authorization_rule(resource_group,"pysdksb","sdkqueue",authorization_rule_name="sdkauth",
        parameters={"properties": {"rights": ["Listen", "Send"]}},)

print("Queue created with Shared Access Policy.")

输出

撰写回答