ROMANCE DAWN for the new world

Microsoft Azure を中心とした技術情報を書いています。

ASP.NET Core アプリケーションで Azure Queue Storage SDK v12 を使用する

ASP.NET Core アプリケーションにおいて、Azure Queue Storage SDK v12 を使用する方法をまとめておきます。
公式ドキュメントに記載のある通りなので、個人的な備忘録です。
github.com

Azure Storage の接続情報管理

Azure Storage の接続情報は、Azure Key Vault および Secret Manager で管理することを前提とします。詳細は、こちらの記事を参照してください。
gooner.hateblo.jp

NuGet パッケージのインストール

現時点で最新の Azure Storage Queues client library である v12 を使います。

Install-Package Azure.Storage.Queues -Version 12.8.0

www.nuget.org

ASP.NET Core アプリケーションの初期化処理

QueueClient クラスのインスタンスを DI コンテナーに登録します。キューの名前は、sample-queue としました。

public void ConfigureServices(IServiceCollection services)
{
    // Queue Storage
    services.AddSingleton(new QueueClient(Configuration["WebApi:StorageConnection"], "sample-queue"));

    // Repository
    services.AddTransient<Infrastructure.IMessageRepository, Infrastructure.MessageRepository>();
}

MessageRepository クラスは、Queue Storage にアクセスするためのクラスとして作ることにしました。

public interface IMessageRepository
{
    Task SendAsync(string message);
    Task<IList<string>> ReceiveAsync();
}

public class MessageRepository : IMessageRepository
{
    private readonly QueueClient _queueClient;

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

Queue にメッセージを送信する

public async Task SendAsync(string message)
{
    await _queueClient.SendMessageAsync(message);
}

Queue からメッセージを取得する

public async Task<IList<string>> ReceiveAsync()
{
    var result = new List<string>();
    var received = await _queueClient.ReceiveMessagesAsync(10, TimeSpan.FromSeconds(1));
    foreach (var message in received.Value)
    {
        result.Add(message.Body.ToString());

        await _queueClient.DeleteMessageAsync(message.MessageId, message.PopReceipt);
    }
    return result;
}