öğretici: .net için Azure kuyruğu Depolama kuyruklarıyla çalışma

Azure kuyruğu Depolama, dağıtılmış bir uygulamanın bileşenleri arasında iletişimi etkinleştirmek için bulut tabanlı kuyruklar uygular. Her kuyruk, bir gönderen bileşeni tarafından eklenebilen ve bir alıcı bileşeni tarafından işlenen iletilerin bir listesini tutar. Bir kuyruk ile uygulamanız, talebi karşılamak için hemen ölçeklendirebilir. bu makalede, Azure kuyruğu Depolama kuyruğu ile çalışmaya yönelik temel adımlar gösterilmektedir.

Bu öğreticide şunların nasıl yapıldığını öğreneceksiniz:

  • Azure Depolama hesabı oluşturma
  • Uygulama oluşturma
  • Azure istemci kitaplıklarını ekleme
  • Zaman uyumsuz kod desteği ekle
  • Bir kuyruk oluşturma
  • Bir kuyruğa ileti ekleme
  • İletileri sıradan çıkarma
  • Boş bir kuyruğu silme
  • Komut satırı bağımsız değişkenlerini denetle
  • Uygulamayı derleyin ve çalıştırın

Önkoşullar

Azure Depolama hesabı oluşturma

ilk olarak, bir Azure Depolama hesabı oluşturun. Depolama hesabı oluşturmaya yönelik adım adım kılavuz için bkz. depolama hesabı oluşturma. Bu, önkoşullardan ücretsiz bir Azure hesabı oluşturduktan sonra gerçekleştirdiğiniz ayrı bir adımdır.

Uygulama oluşturma

Adlı bir .NET Core uygulaması oluşturun QueueApp . Kolaylık olması için, bu uygulama sıra aracılığıyla ileti gönderir ve alır.

  1. Konsol penceresinde (cmd, PowerShell veya Azure CLı gibi), dotnet new adıyla yeni bir konsol uygulaması oluşturmak için komutunu kullanın QueueApp . Bu komut, adlı tek bir kaynak dosyası olan basit bir "Hello World" C# projesi oluşturur Program.cs .

    dotnet new console -n QueueApp
    
  2. Yeni oluşturulan QueueApp klasörüne geçip uygulamayı derleyerek her şeyin yolunda gittiğini doğrulayın.

    cd QueueApp
    
    dotnet build
    

    Aşağıdaki çıktıya benzer sonuçlar görmeniz gerekir:

    C:\Tutorials>dotnet new console -n QueueApp
    The template "Console Application" was created successfully.
    
    Processing post-creation actions...
    Running 'dotnet restore' on QueueApp\QueueApp.csproj...
      Restore completed in 155.63 ms for C:\Tutorials\QueueApp\QueueApp.csproj.
    
    Restore succeeded.
    
    C:\Tutorials>cd QueueApp
    
    C:\Tutorials\QueueApp>dotnet build
    Microsoft (R) Build Engine version 16.0.450+ga8dc7f1d34 for .NET Core
    Copyright (C) Microsoft Corporation. All rights reserved.
    
      Restore completed in 40.87 ms for C:\Tutorials\QueueApp\QueueApp.csproj.
      QueueApp -> C:\Tutorials\QueueApp\bin\Debug\netcoreapp3.1\QueueApp.dll
    
    Build succeeded.
        0 Warning(s)
        0 Error(s)
    
    Time Elapsed 00:00:02.40
    
    C:\Tutorials\QueueApp>_
    

Azure istemci kitaplıklarını ekleme

  1. komutunu kullanarak Azure Depolama istemci kitaplıklarını projeye ekleyin dotnet add package .

    Konsol penceresindeki proje klasöründen aşağıdaki komutu çalıştırın.

    dotnet add package Azure.Storage.Queues
    

Using deyimleri Ekle

  1. proje dizinindeki komut satırından, code . geçerli dizinde Visual Studio Code açmak için yazın. Komut satırı penceresini açık tutun. Daha sonra çalıştırılacak daha fazla komut olacaktır. Derleme ve hata ayıklama için gereken C# varlıkları eklemeniz istenirse, Evet düğmesine tıklayın.

  2. Program.csKaynak dosyayı açın ve deyimden hemen sonra aşağıdaki ad alanlarını ekleyin using System; . bu uygulama, Azure Depolama bağlanmak ve kuyruklarla çalışmak için bu ad alanlarındaki türleri kullanır.

    using System.Threading.Tasks;
    using Azure.Storage.Queues;
    using Azure.Storage.Queues.Models;
    
  3. Program.cs dosyasını kaydedin.

Zaman uyumsuz kod desteği ekle

Uygulama bulut kaynaklarını kullandığından, kod zaman uyumsuz olarak çalışır.

  1. MainYöntemi zaman uyumsuz olarak çalışacak şekilde güncelleştirin. void async Task Dönüş değeri ile değiştirin.

    static async Task Main(string[] args)
    
  2. Program.cs dosyasını kaydedin.

Bir kuyruk oluşturma

Azure API 'Lerine hiçbir çağrı yapmadan önce, Azure portal kimlik bilgilerinizi almalısınız.

Azure portalından kimlik bilgilerinizi kopyalama

örnek uygulama Azure Depolama istek yaptığında yetkilendirilmiş olması gerekir. Bir isteği yetkilendirmek için, depolama hesabı kimlik bilgilerinizi uygulamaya bağlantı dizesi olarak ekleyin. Depolama hesabı kimlik bilgilerinizi görüntülemek için aşağıdaki adımları izleyin:

  1. Azure Portal’ında oturum açın.

  2. Depolama hesabınızı bulun.

  3. Depolama hesabı menü bölmesinde, güvenlik + ağ altında, erişim anahtarları' nı seçin. Burada, her anahtar için hesap erişim anahtarlarını ve tüm bağlantı dizesini görüntüleyebilirsiniz.

    Erişim anahtarı ayarlarının Azure portal nerede olduğunu gösteren ekran görüntüsü

  4. Erişim tuşları bölmesinde, anahtarları göster' i seçin.

  5. KEY1 bölümünde bağlantı dizesi değerini bulun. Bağlantı dizesini kopyalamak için Panoya Kopyala simgesini seçin. Bir sonraki bölümde bağlantı dizesi değerini bir ortam değişkenine eklersiniz.

    Azure portalından bağlantı dizesinin kopyalanmasını gösteren ekran görüntüsü

Depolama bağlantı dizelerinizi yapılandırma

Bağlantı dizesini kopyaladıktan sonra, uygulamayı çalıştıran yerel makinede yeni bir ortam değişkenine yazın. Ortam değişkenini ayarlamak için bir konsol penceresi açın ve işletim sisteminizin yönergelerini izleyin. <yourconnectionstring>Gerçek bağlantı dizeniz ile değiştirin.

Windows

setx AZURE_STORAGE_CONNECTION_STRING "<yourconnectionstring>"

ortam değişkenini Windows ekledikten sonra, komut penceresinin yeni bir örneğini başlatmanız gerekir.

Linux

export AZURE_STORAGE_CONNECTION_STRING="<yourconnectionstring>"

macOS

export AZURE_STORAGE_CONNECTION_STRING="<yourconnectionstring>"

Programları yeniden Başlat

Ortam değişkenini ekledikten sonra, ortam değişkenini okumak için gereken tüm çalışan programları yeniden başlatın. Örneğin, devam etmeden önce geliştirme ortamınızı veya düzenleyiciyi yeniden başlatın.

Bağlantı dizesini uygulamaya ekleme

Depolama hesabına erişebilmeleri için bağlantı dizesini uygulamaya ekleyin.

  1. Visual Studio Code 'e geri dönün.

  2. Yönteminde, Main Console.WriteLine("Hello, World"); kodu, ortam değişkeninden bağlantı dizesini alan aşağıdaki satırla değiştirin.

    string connectionString = Environment.GetEnvironmentVariable("AZURE_STORAGE_CONNECTION_STRING");
    
  3. MainDaha sonra gönderme ve alma yöntemlerine geçirilen bir kuyruk nesnesi oluşturmak için aşağıdaki kodu ekleyin.

    QueueClient queue = new QueueClient(connectionString, "mystoragequeue");
    
  4. Dosyayı kaydedin.

Kuyruğa ileti ekleme

Kuyruğa ileti göndermek için yeni bir yöntem oluşturun.

  1. InsertMessageAsyncSınıfınıza aşağıdaki yöntemi ekleyin Program .

    Bu yönteme bir kuyruk başvurusu geçirilir. Zaten mevcut değilse, çağırarak yeni bir kuyruk oluşturulur CreateIfNotExistsAsync . Ardından, öğesini newMessage çağırarak kuyruğa ekler SendMessageAsync .

    static async Task InsertMessageAsync(QueueClient theQueue, string newMessage)
    {
        if (null != await theQueue.CreateIfNotExistsAsync())
        {
            Console.WriteLine("The queue was created.");
        }
    
        await theQueue.SendMessageAsync(newMessage);
    }
    
  2. Isteğe bağlı: Varsayılan olarak, bir ileti için en uzun yaşam süresi yedi güne ayarlanır. İletinin yaşam süresi için herhangi bir pozitif sayı belirtebilirsiniz. Aşağıdaki kod parçacığı, süresi dolmayacak bir ileti ekler.

    Kullanım süreleri dolan bir ileti eklemek için, çağrımda ' i kullanın Timespan.FromSeconds(-1) SendMessageAsync .

    await theQueue.SendMessageAsync(newMessage, default, TimeSpan.FromSeconds(-1), default);
    
  3. Dosyayı kaydedin.

Kuyruk iletisi UTF-8 kodlaması kullanan bir XML isteğiyle uyumlu biçimde olmalıdır. İleti boyutu 64 KB 'ye kadar olabilir. Bir ileti ikili veri içeriyorsa, iletiyi Base64 olarak kodlayın .

İletileri sıradan çıkarma

Kuyruktan ileti almak için yeni bir yöntem oluşturun. İleti başarıyla alındıktan sonra, bir kereden fazla işlenmemesi için kuyruktan silinmesi önemlidir.

  1. Sınıfınıza adlı yeni bir yöntem ekleyin RetrieveNextMessageAsync Program .

    Bu yöntem ReceiveMessagesAsync , 1 yalnızca kuyruktaki bir sonraki iletiyi almak için ilk parametreyi geçirerek kuyruktan çağırarak bir ileti alır. İleti alındıktan sonra, çağırarak kuyruğu kuyruktan silin DeleteMessageAsync .

    V12 öncesi bir SDK sürümü ile sıraya bir ileti gönderildiğinde, otomatik olarak Base64 kodlamalı olur. V12 ile başlayarak, bu işlev kaldırılmıştır. V12 SDK kullanarak bir ileti aldığınızda, otomatik olarak Base64 kodu çözülür. İçeriği açıkça Base64 olarak çözebilmeniz gerekir.

    static async Task<string> RetrieveNextMessageAsync(QueueClient theQueue)
    {
        if (await theQueue.ExistsAsync())
        {
            QueueProperties properties = await theQueue.GetPropertiesAsync();
    
            if (properties.ApproximateMessagesCount > 0)
            {
                QueueMessage[] retrievedMessage = await theQueue.ReceiveMessagesAsync(1);
                string theMessage = retrievedMessage[0].Body.ToString();
                await theQueue.DeleteMessageAsync(retrievedMessage[0].MessageId, retrievedMessage[0].PopReceipt);
                return theMessage;
            }
    
            return null;
        }
    
        return null;
    }
    
  2. Dosyayı kaydedin.

Boş bir kuyruğu silme

Oluşturduğunuz kaynaklara hala ihtiyacınız olup olmadığını belirlemek, projenin sonundaki en iyi yöntemdir. Çalışır durumda bırakılan kaynaklar maliyetlerin artmasına neden olabilir. Kuyruk mevcutsa ancak boşsa, kullanıcıdan kuyruğu silmek istiyor olup olamay olduğunu sorun.

  1. Boş kuyruğu RetrieveNextMessageAsync silmek için bir istem eklemek için yöntemini genişletin.

    static async Task<string> RetrieveNextMessageAsync(QueueClient theQueue)
    {
        if (await theQueue.ExistsAsync())
        {
            QueueProperties properties = await theQueue.GetPropertiesAsync();
    
            if (properties.ApproximateMessagesCount > 0)
            {
                QueueMessage[] retrievedMessage = await theQueue.ReceiveMessagesAsync(1);
                string theMessage = retrievedMessage[0].Body.ToString();
                await theQueue.DeleteMessageAsync(retrievedMessage[0].MessageId, retrievedMessage[0].PopReceipt);
                return theMessage;
            }
            else
            {
                Console.Write("The queue is empty. Attempt to delete it? (Y/N) ");
                string response = Console.ReadLine();
    
                if (response.ToUpper() == "Y")
                {
                    await theQueue.DeleteIfExistsAsync();
                    return "The queue was deleted.";
                }
                else
                {
                    return "The queue was not deleted.";
                }
            }
        }
        else
        {
            return "The queue does not exist. Add a message to the command line to create the queue and store the message.";
        }
    }
    
  2. Dosyayı kaydedin.

Komut satırı bağımsız değişkenlerini denetleme

Uygulamaya geçirilen komut satırı bağımsız değişkenleri varsa, bunların kuyruğa eklenecek bir ileti olduğunu varsayın. Dizeyi yapmak için bağımsız değişkenleri birleştirme. Daha önce ekleycek yöntemi çağırarak bu InsertMessageAsync dizeyi ileti kuyruğuna ekleyin.

Komut satırı bağımsız değişkeni yoksa bir alma işlemi denemesi. Kuyrukta RetrieveNextMessageAsync bir sonraki iletiyi almak için yöntemini çağırma.

Son olarak, çağrısıyla çıkış öncesinde kullanıcı girişini Console.ReadLine bekleyin.

  1. Komut satırı Main bağımsız değişkenlerini kontrol etmek ve kullanıcı girişini beklemek için yöntemini genişletin.

    static async Task Main(string[] args)
    {
        string connectionString = Environment.GetEnvironmentVariable("AZURE_STORAGE_CONNECTION_STRING");
    
        QueueClient queue = new QueueClient(connectionString, "mystoragequeue");
    
        if (args.Length > 0)
        {
            string value = String.Join(" ", args);
            await InsertMessageAsync(queue, value);
            Console.WriteLine($"Sent: {value}");
        }
        else
        {
            string value = await RetrieveNextMessageAsync(queue);
            Console.WriteLine($"Received: {value}");
        }
    
        Console.Write("Press Enter...");
        Console.ReadLine();
    }
    
  2. Dosyayı kaydedin.

Kodu tamamla

Bu proje için tam kod listesi burada velanmıştır.

using System;
using System.Threading.Tasks;
using Azure.Storage.Queues;
using Azure.Storage.Queues.Models;

namespace QueueApp
{
    class Program
    {
        static async Task Main(string[] args)
        {
            string connectionString = Environment.GetEnvironmentVariable("AZURE_STORAGE_CONNECTION_STRING");

            QueueClient queue = new QueueClient(connectionString, "mystoragequeue");

            if (args.Length > 0)
            {
                string value = String.Join(" ", args);
                await InsertMessageAsync(queue, value);
                Console.WriteLine($"Sent: {value}");
            }
            else
            {
                string value = await RetrieveNextMessageAsync(queue);
                Console.WriteLine($"Received: {value}");
            }

            Console.Write("Press Enter...");
            Console.ReadLine();
        }

        static async Task InsertMessageAsync(QueueClient theQueue, string newMessage)
        {
            if (null != await theQueue.CreateIfNotExistsAsync())
            {
                Console.WriteLine("The queue was created.");
            }

            await theQueue.SendMessageAsync(newMessage);
        }

        static async Task<string> RetrieveNextMessageAsync(QueueClient theQueue)
        {
            if (await theQueue.ExistsAsync())
            {
                QueueProperties properties = await theQueue.GetPropertiesAsync();

                if (properties.ApproximateMessagesCount > 0)
                {
                    QueueMessage[] retrievedMessage = await theQueue.ReceiveMessagesAsync(1);
                    string theMessage = retrievedMessage[0].Body.ToString();
                    await theQueue.DeleteMessageAsync(retrievedMessage[0].MessageId, retrievedMessage[0].PopReceipt);
                    return theMessage;
                }
                else
                {
                    Console.Write("The queue is empty. Attempt to delete it? (Y/N) ");
                    string response = Console.ReadLine();

                    if (response.ToUpper() == "Y")
                    {
                        await theQueue.DeleteIfExistsAsync();
                        return "The queue was deleted.";
                    }
                    else
                    {
                        return "The queue was not deleted.";
                    }
                }
            }
            else
            {
                return "The queue does not exist. Add a message to the command line to create the queue and store the message.";
            }
        }
    }
}

Uygulamayı derleyin ve çalıştırın

  1. Projeyi derlemek için proje dizininde komut satırına aşağıdaki dotnet komutunu çalıştırın.

    dotnet build
    
  2. Proje başarıyla oluşturulduktan sonra, kuyruğa ilk iletiyi eklemek için aşağıdaki komutu çalıştırın.

    dotnet run First queue message
    

    Şu çıkışı görmelisiniz:

    C:\Tutorials\QueueApp>dotnet run First queue message
    The queue was created.
    Sent: First queue message
    Press Enter..._
    
  3. Kuyrukta ilk iletiyi almak ve kaldırmak için komut satırı bağımsız değişkeni olmayan uygulamayı çalıştırın.

    dotnet run
    
  4. Tüm iletiler kaldırılana kadar uygulamayı çalıştırmaya devam edin. Bir kez daha çalıştırmanız, kuyruğun boş olduğunu ve kuyruğu silme istemini alırsınız.

    C:\Tutorials\QueueApp>dotnet run First queue message
    The queue was created.
    Sent: First queue message
    Press Enter...
    
    C:\Tutorials\QueueApp>dotnet run Second queue message
    Sent: Second queue message
    Press Enter...
    
    C:\Tutorials\QueueApp>dotnet run Third queue message
    Sent: Third queue message
    Press Enter...
    
    C:\Tutorials\QueueApp>dotnet run
    Received: First queue message
    Press Enter...
    
    C:\Tutorials\QueueApp>dotnet run
    Received: Second queue message
    Press Enter...
    
    C:\Tutorials\QueueApp>dotnet run
    Received: Third queue message
    Press Enter...
    
    C:\Tutorials\QueueApp>dotnet run
    The queue is empty. Attempt to delete it? (Y/N) Y
    Received: The queue was deleted.
    Press Enter...
    
    C:\Tutorials\QueueApp>_
    

Sonraki adımlar

Bu öğreticide, şunların nasıl yapıldığını öğrendiniz:

  1. Bir kuyruk oluşturma
  2. Kuyruktan ileti ekleme ve kuyruktan kaldırma
  3. Azure Kuyruğu'Depolama silme

Daha fazla bilgi için Azure Kuyruk Depolama hızlı başlangıçlar'a göz atabilirsiniz.