You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 07:49:53