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

在ASP.NET中使用Azure.Storage.Queues:依赖注入配置实现

.NET 5 ASP.NET Web应用Azure.Storage.Queues依赖注入配置方案

1. 安装依赖NuGet包

首先安装兼容.NET 5的Azure.Storage.Queues稳定版包,可通过包管理控制台执行命令:
Install-Package Azure.Storage.Queues -Version 12.18.0
也可通过NuGet包管理器界面搜索安装任意12.x版本的稳定版包。

2. 添加配置项

在appsettings.json文件中添加Azure存储账户和目标队列的配置:

{
  "AzureStorage": {
    "ConnectionString": "替换为你的Azure存储账户连接字符串",
    "TargetQueueName": "替换为你要操作的队列名称"
  }
}

3. 注册服务到DI容器

打开Startup.cs文件,在ConfigureServices方法中添加QueueClient的注册逻辑:

using Azure.Storage.Queues;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;

public void ConfigureServices(IServiceCollection services)
{
    // 你原有服务的注册逻辑,比如控制器注册
    services.AddControllersWithViews();

    // 读取配置参数
    var storageConnStr = Configuration.GetValue<string>("AzureStorage:ConnectionString");
    var queueName = Configuration.GetValue<string>("AzureStorage:TargetQueueName");

    // 单例注册QueueClient,该类本身是线程安全的,适合全局复用
    services.AddSingleton(sp => 
    {
        var queueClient = new QueueClient(storageConnStr, queueName);
        // 如果需要应用启动时自动创建不存在的队列,可取消下一行注释
        // queueClient.CreateIfNotExists();
        return queueClient;
    });

    // 注册你自己的业务服务类
    services.AddScoped<IMyQueueBusinessService, MyQueueBusinessService>();
}

4. 在业务类中注入使用示例

自定义业务服务类的实现示例:

using Azure.Storage.Queues;
using Azure.Storage.Queues.Models;

public interface IMyQueueBusinessService
{
    Task SendMessageAsync(string content);
    Task<List<string>> GetMessagesAsync(int maxCount = 5);
}

public class MyQueueBusinessService : IMyQueueBusinessService
{
    private readonly QueueClient _queueClient;

    // 构造函数注入QueueClient实例
    public MyQueueBusinessService(QueueClient queueClient)
    {
        _queueClient = queueClient;
    }

    public async Task SendMessageAsync(string content)
    {
        await _queueClient.SendMessageAsync(BinaryData.FromString(content));
    }

    public async Task<List<string>> GetMessagesAsync(int maxCount = 5)
    {
        var result = await _queueClient.ReceiveMessagesAsync(maxCount, TimeSpan.FromMinutes(5));
        var messageList = new List<string>();
        foreach (var msg in result.Value)
        {
            messageList.Add(msg.Body.ToString());
            // 处理完成后删除队列消息
            await _queueClient.DeleteMessageAsync(msg.MessageId, msg.PopReceipt);
        }
        return messageList;
    }
}

5. 控制器直接注入使用示例

也可以跳过自定义服务,直接在控制器中注入QueueClient使用:

public class TestController : Controller
{
    private readonly QueueClient _queueClient;

    public TestController(QueueClient queueClient)
    {
        _queueClient = queueClient;
    }

    public async Task<IActionResult> SendTest()
    {
        await _queueClient.SendMessageAsync("这是一条测试消息");
        return Content("消息发送成功");
    }
}

多队列场景适配说明

如果需要操作多个不同的队列,建议注册QueueServiceClient到DI容器,在需要使用的地方调用GetQueueClient("目标队列名")获取对应队列的客户端实例即可,避免重复注册多个QueueClient实例。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 06:57:05