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

如何使用Azure.Messaging.ServiceBus.Administration实现分页功能?

Azure.Messaging.ServiceBus.Administration 分页实现指南

新的Azure.Messaging.ServiceBus.Administration SDK采用异步分页模型,返回的AsyncPageable<QueueProperties>类型会自动处理分页逻辑,无需手动维护skip参数。以下是两种实现方式:

一、推荐:SDK原生分页(自动处理)

利用AsPages方法指定每页大小(对应旧代码的top),SDK会自动加载后续页面,无需手动计算偏移量:

private async Task<QueueProperties> FindQueue(ServiceBusAdministrationClient administrationClient, string queueName, int pageSize)
{
    AsyncPageable<QueueProperties> queues = administrationClient.GetQueuesAsync();
    
    // 按页异步枚举队列
    await foreach (Page<QueueProperties> page in queues.AsPages(pageSizeHint: pageSize))
    {
        foreach (QueueProperties queue in page.Values)
        {
            if (queue.Name.Equals(queueName, StringComparison.OrdinalIgnoreCase))
            {
                return queue;
            }
        }
        // 当前页数量等于pageSize时,SDK会自动加载下一页
    }

    // 未匹配到目标队列
    return null;
}

调用时直接传入每页大小即可:

var administrationClient = new ServiceBusAdministrationClient(ConnectionString);
var foundQueue = await FindQueue(administrationClient, queueName, 100);

二、兼容旧逻辑:手动处理top/skip

如果需要严格模拟旧代码的top和skip参数逻辑,可以手动计算跳过的元素数量:

private async Task<QueueProperties> FindQueue(ServiceBusAdministrationClient administrationClient, string queueName, int top, int skip)
{
    AsyncPageable<QueueProperties> queues = administrationClient.GetQueuesAsync();
    int processedTotal = 0;
    
    await foreach (Page<QueueProperties> page in queues.AsPages(pageSizeHint: top))
    {
        // 计算当前页需要跳过的元素数
        int skipInPage = Math.Max(0, skip - processedTotal);
        // 从当前页取指定数量的元素
        var targetQueues = page.Values.Skip(skipInPage).Take(top);
        
        foreach (QueueProperties queue in targetQueues)
        {
            if (queue.Name.Equals(queueName, StringComparison.OrdinalIgnoreCase))
            {
                return queue;
            }
        }
        
        processedTotal += page.Values.Count;
        
        // 已处理数量超过skip+top,或当前页不足top,停止遍历
        if (processedTotal >= skip + top || page.Values.Count < top)
        {
            break;
        }
    }

    // 未匹配到目标队列
    return null;
}

调用方式和旧代码一致:

var administrationClient = new ServiceBusAdministrationClient(ConnectionString);
var foundQueue = await FindQueue(administrationClient, queueName, 100, 0);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 03:17:44