Databricks(PySpark)连接Azure Service Bus Queue发消息遇认证错误求助
解决Azure Service Bus认证错误(amqp:client_error)的方案
一、修正代码语法错误
你的代码存在函数参数缺少逗号的语法问题,这会直接导致运行失败,先修正这部分:
修正后的完整代码(含JSON消息发送)
import json from azure.identity import ClientSecretCredential from azure.servicebus import ServiceBusClient, ServiceBusMessage # AAD 和 Service Bus 配置信息 tenant_id = "你的租户ID" client_id = "你的客户端ID" client_secret = "你的客户端密钥" namespace = "你的Service Bus命名空间" queue_name = "你的队列名称" # 创建凭据(补全参数逗号) credential = ClientSecretCredential( tenant_id=tenant_id, client_id=client_id, client_secret=client_secret ) # 创建Service Bus客户端(补全参数逗号) servicebus_client = ServiceBusClient( fully_qualified_namespace=f"{namespace}.servicebus.windows.net", credential=credential ) # 发送JSON格式消息 with servicebus_client: sender = servicebus_client.get_queue_sender(queue_name=queue_name) with sender: # 构造JSON消息内容 json_message = {"message": "来自Databricks的JSON消息", "timestamp": "2024-05-20"} # 转为字符串后创建ServiceBusMessage message = ServiceBusMessage(json.dumps(json_message), content_type="application/json") sender.send_messages(message) print("JSON消息已发送")
二、排查服务主体权限配置
认证错误的核心原因通常是权限不足,需确保:
- 给该服务主体在Service Bus命名空间或目标队列上分配Azure Service Bus Data Sender角色
- 确认角色分配的范围正确(推荐直接分配到命名空间级别,避免队列级别的遗漏)
- 等待角色分配生效(通常需要5-10分钟)
三、Databricks环境额外检查
如果在Databricks集群运行,还需确认:
- 集群所在的虚拟网络能访问Service Bus(若启用了私有端点,需配置VNet对等连接或允许集群IP访问)
- 若使用Databricks Secrets存储敏感信息,建议将client_secret等配置存入Secrets,避免硬编码(例如
dbutils.secrets.get("scope", "secret-key"))
内容的提问来源于stack exchange,提问作者Rocking Surya
相关产品推荐
相关产品推荐

