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

使用ServiceBusClient读取死信消息原因,Azure函数托管标识认证失败

使用托管标识认证ServiceBusClient访问Azure Service Bus死信队列

前提条件

  • 确保Azure函数已启用系统分配或用户分配的托管标识
  • 为托管标识分配Azure Service Bus Data Receiver(或更高权限如Data Owner)角色到目标Service Bus命名空间(权限生效可能需要数分钟)

代码实现步骤

1. 安装依赖包

Install-Package Azure.Messaging.ServiceBus
Install-Package Azure.Identity

2. 托管标识认证+访问DLQ示例代码

using Azure.Identity;
using Azure.Messaging.ServiceBus;

// 用托管标识初始化ServiceBusClient
var serviceBusClient = new ServiceBusClient(
    "<你的ServiceBus命名空间>.servicebus.windows.net",
    new DefaultAzureCredential());

// 创建死信队列的MessageReceiver
var dlqReceiver = serviceBusClient.CreateReceiver(
    "<目标队列名称>",
    new ServiceBusReceiverOptions
    {
        SubQueue = SubQueue.DeadLetter
    });

// 查看死信消息并读取相关属性
var dlqMessages = await dlqReceiver.PeekMessagesAsync(maxMessages: 10);
foreach (var message in dlqMessages)
{
    string deadLetterReason = message.DeadLetterReason;
    string deadLetterErrorDesc = message.DeadLetterErrorDescription;
    string messageBody = message.Body.ToString();

    // 按需处理消息
    Console.WriteLine($"死信原因: {deadLetterReason}, 错误描述: {deadLetterErrorDesc}, 消息内容: {messageBody}");
}

// 释放资源
await dlqReceiver.DisposeAsync();
await serviceBusClient.DisposeAsync();

特殊场景:用户分配的托管标识

若使用用户分配的托管标识,需在初始化凭证时指定ClientId:

var credential = new DefaultAzureCredential(new DefaultAzureCredentialOptions
{
    ManagedIdentityClientId = "<你的用户分配托管标识ClientId>"
});
var serviceBusClient = new ServiceBusClient("<你的命名空间>.servicebus.windows.net", credential);

内容的提问来源于stack exchange,提问作者user2327358

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 23:01:08