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

.NET Framework 4.8升级Azure.ServiceBus包后NamespaceManager报错求助

解决Azure.Messaging.ServiceBus中NamespaceManager不存在的问题

问题原因

旧的Microsoft.Azure.ServiceBus包中的NamespaceManager在新的Azure.Messaging.ServiceBus包中已被移除,取而代之的是ServiceBusAdministrationClient——这是Azure官方推荐的用于管理Service Bus资源(主题、订阅、队列等)的新客户端。

解决方案步骤

1. 确认包安装状态

确保项目已安装Azure.Messaging.ServiceBus NuGet包(该包兼容.NET Framework 4.8,建议安装最新稳定版本)。

2. 重写代码替换NamespaceManager

以下是适配新包的完整代码,可直接替换你原有的GetDeadLetterQueueData方法:

using Azure.Messaging.ServiceBus.Administration;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;

public async Task<List<TopicInfo>> GetDeadLetterQueueData()
{
    var topicInfos = new List<TopicInfo>();
    
    // 初始化管理客户端,替代原NamespaceManager
    var adminClient = new ServiceBusAdministrationClient(_serviceBusConnectionString);

    // 获取所有主题(异步方法)
    var topics = await adminClient.GetTopicsAsync().ToListAsync();

    foreach (var topic in topics)
    {
        // 获取当前主题下的所有订阅(异步方法)
        var subscriptions = await adminClient.GetSubscriptionsAsync(topic.Name).ToListAsync();
        
        foreach (var subscription in subscriptions)
        {
            // 获取订阅的运行时属性,包含死信队列消息数等统计信息
            var runtimeProperties = await adminClient.GetSubscriptionRuntimePropertiesAsync(topic.Name, subscription.Name);
            
            // 过滤死信消息数大于0,且订阅名不是"Fluff"的项
            if (runtimeProperties.Value.DeadLetterMessageCount > 0 
                && !subscription.Name.Equals("Fluff", StringComparison.InvariantCultureIgnoreCase))
            {
                topicInfos.Add(new TopicInfo
                {
                    // 按需填充主题和订阅信息,示例:
                    TopicName = topic.Name,
                    SubscriptionName = subscription.Name,
                    DeadLetterMessageCount = runtimeProperties.Value.DeadLetterMessageCount
                    // 其他字段自行补充
                });
            }
        }
    }

    return topicInfos;
}

关键改动说明

  • 替换管理客户端:用ServiceBusAdministrationClient替代NamespaceManager,初始化时直接传入Service Bus连接字符串。
  • 异步方法适配:新客户端的所有资源查询方法均为异步,需使用await调用,同时ToListAsync()需要引用System.Linq命名空间。
  • 死信消息数获取:原代码中的subscriptionDescription.MessageCount是订阅本身的消息数,若要获取死信队列的消息数,需通过GetSubscriptionRuntimePropertiesAsync获取DeadLetterMessageCount属性。
  • API命名简化:新包的API命名更直观,比如用topic.Name替代原topicDescription.Path,直接通过subscription.Name获取订阅名称。

内容的提问来源于stack exchange,提问作者mnu-nasir

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 04:17:14