使用Python创建Azure Service Bus队列共享访问策略时遇内部错误
错误原因
你直接使用AuthorizationRule基类并指定type='SharedAccessPolicy'的方式不符合Azure Service Bus Python SDK的设计规范。SDK中针对Shared Access Policy有专门的子类SharedAccessAuthorizationRule,手动指定类型会导致服务端无法正确解析请求,从而抛出500错误。
正确实现代码
首先确保导入正确的授权规则类,然后用该类构建授权规则列表传入create_queue方法:
from azure.servicebus.admin import ServiceBusAdministrationClient, SharedAccessAuthorizationRule # 初始化adminClient(假设你已完成客户端的正确初始化) # adminClient = ServiceBusAdministrationClient.from_connection_string("<connection-string>") # 创建带Shared Access Policy的队列 adminClient.create_queue( '<queue-name>', authorization_rules=[ SharedAccessAuthorizationRule( key_name='my-send-policy', rights=['Send'] # 若不需要手动指定密钥,SDK会自动生成;如需手动指定,添加以下参数: # primary_key='<your-primary-key>', # secondary_key='<your-secondary-key>' ) ], default_message_time_to_live='P8D', duplicate_detection_history_time_window='PT1H', # 修正原代码中的拼写错误(少了字母d) lock_duration='PT1M', max_delivery_count=100, max_size_in_megabytes=4096, max_message_size_in_kilobytes=256 )
关键要点说明
- 使用正确的规则类:必须用
SharedAccessAuthorizationRule而非AuthorizationRule基类,该类已内置对应Shared Access Policy的类型标识,无需手动指定type参数。 - 权限参数:
rights接受字符串列表,可选值为'Send'、'Listen'、'Manage',可组合使用(如['Send', 'Listen'])。 - 密钥生成:若不手动提供
primary_key和secondary_key,SDK会自动生成符合要求的密钥;手动指定时需确保密钥长度符合Azure要求(至少32个字符)。 - 拼写修正:原代码中
uplicate_detection_history_time_window存在拼写错误(缺少字母d),修正后可避免潜在的配置失效问题。
内容的提问来源于stack exchange,提问作者Stefan Beyer
相关产品推荐
相关产品推荐

