Öğretici: .NET'te Azure Kuyruk Depolama kuyruklarıyla çalışma
Azure Kuyruk 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 eklenebilecek ve alıcı bileşeni tarafından işlenebilecek iletilerin listesini tutar. Kuyrukla uygulamanız talebi karşılamak için hemen ölçeklendirilebilir. Bu makalede Azure Kuyruk Depolama kuyruğuyla ç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 için destek ekleme
- Bir kuyruk oluşturma
- Kuyruğa ileti ekleme
- İletileri sıralama
- Boş bir kuyruğu silme
- Komut satırı bağımsız değişkenlerini denetleme
- Uygulamayı derleyin ve çalıştırın
Önkoşullar
- Platformlar arası Visual Studio Code düzenleyicisinin ücretsiz kopyasını edinin.
- .NET Core SDK sürüm 3.1 veya üzerini indirip yükleyin.
- Geçerli bir Azure aboneliğiniz yoksa başlamadan önce ücretsiz bir hesap oluşturun.
Azure Depolama hesabı oluşturma
İlk 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şullarda ücretsiz bir Azure hesabı oluşturduktan sonra gerçekleştirdiğiniz ayrı bir adımdır.
Uygulama oluşturma
adlı QueueApp
bir .NET Core uygulaması oluşturun. Kolaylık olması için bu uygulama kuyruk üzerinden hem ileti gönderir hem de alır.
Bir konsol penceresinde (cmd, PowerShell veya Azure CLI gibi), adlı
QueueApp
yeni bir konsol uygulaması oluşturmak için komutunu kullanındotnet new
. Bu komut, adlıProgram.cs
tek bir kaynak dosyasıyla basit bir "merhaba dünya" C# projesi oluşturur.dotnet new console -n QueueApp
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 çıkışa 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
komutunu kullanarak
dotnet add package
Azure Depolama istemci kitaplıklarını projeye ekleyin.Konsol penceresindeki proje klasöründen aşağıdaki komutu çalıştırın.
dotnet add package Azure.Storage.Queues
using deyimleri ekleme
Proje dizinindeki komut satırından, geçerli dizinde Visual Studio Code açmak için yazın
code .
. Komut satırı penceresini açık tutun. Daha sonra çalıştırılacak daha fazla komut olacaktır. Derlemek ve hata ayıklamak için gereken C# varlıklarını eklemeniz istenirse Evet düğmesine tıklayın.Program.cs
Kaynak dosyayı açın ve deyiminin hemen arkasınausing System;
aşağıdaki ad alanlarını ekleyin. Bu uygulama, Azure Depolama'ya bağlanmak ve kuyruklarla çalışmak için bu ad alanlarının türlerini kullanır.using System.Threading.Tasks; using Azure.Storage.Queues; using Azure.Storage.Queues.Models;
Program.cs
dosyasını kaydedin.
Zaman uyumsuz kod için destek ekleme
Uygulama bulut kaynaklarını kullandığından kod zaman uyumsuz olarak çalışır.
Main
yöntemini zaman uyumsuz olarak çalışacak şekilde güncelleştirin. değerini birasync Task
dönüş değeriyle değiştirinvoid
.static async Task Main(string[] args)
Program.cs
dosyasını kaydedin.
Bir kuyruk oluşturma
Azure API'lerine çağrı yapmadan önce kimlik bilgilerinizi Azure portal almanız gerekir.
Azure portalından kimlik bilgilerinizi kopyalama
Örnek uygulama Azure Depolama'ya istekte bulunurken yetkilendirilmelidir. 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 şu adımları izleyin:
Azure Portal’ında oturum açın.
Depolama hesabınızı bulun.
Depolama hesabı menü bölmesindeki Güvenlik + ağ altında Erişim anahtarları'nı seçin. Burada hesap erişim anahtarlarını ve her anahtarın tam bağlantı dizesini görüntüleyebilirsiniz.
Erişim anahtarları bölmesinde Anahtarları göster'i seçin.
key1 bölümünde Bağlantı dizesi değerini bulun. Bağlantı dizesini kopyalamak için Panoya kopyala simgesini seçin. Sonraki bölümde bağlantı dizesi değerini bir ortam değişkenine ekleyeceksiniz.
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. değerini gerçek bağlantı dizenizle değiştirin <yourconnectionstring>
.
setx AZURE_STORAGE_CONNECTION_STRING "<yourconnectionstring>"
Windows'da ortam değişkenini ekledikten sonra komut penceresinin yeni bir örneğini başlatmanız gerekir.
Programları yeniden başlatma
Ortam değişkenini ekledikten sonra ortam değişkenini okuması gereken tüm çalışan programları yeniden başlatın. Örneğin, devam etmeden önce geliştirme ortamınızı veya düzenleyicinizi yeniden başlatın.
Uygulamaya bağlantı dizesini ekleme
Depolama hesabına erişebilmesi için uygulamaya bağlantı dizesini ekleyin.
Visual Studio Code'a geri dönün.
yönteminde
Main
, kodu ortam değişkeninden bağlantı dizesini alan aşağıdaki satırla değiştirinConsole.WriteLine("Hello, World");
.string connectionString = Environment.GetEnvironmentVariable("AZURE_STORAGE_CONNECTION_STRING");
Daha sonra gönderme ve alma yöntemlerine
Main
geçirilen bir kuyruk nesnesi oluşturmak için aşağıdaki kodu ekleyin.QueueClient queue = new QueueClient(connectionString, "mystoragequeue");
Dosyayı kaydedin.
Kuyruğa ileti ekleme
Kuyruğa ileti göndermek için yeni bir yöntem oluşturun.
Sınıfınıza
Program
aşağıdakiInsertMessageAsync
yöntemi ekleyin.Bu yönteme bir kuyruk başvurusu geçirilir. Henüz mevcut değilse çağrısıyla
CreateIfNotExistsAsync
yeni bir kuyruk oluşturulur. Ardından çağırarakSendMessageAsync
kuyruğuna eklernewMessage
.static async Task InsertMessageAsync(QueueClient theQueue, string newMessage) { if (null != await theQueue.CreateIfNotExistsAsync()) { Console.WriteLine("The queue was created."); } await theQueue.SendMessageAsync(newMessage); }
Isteğe bağlı: Varsayılan olarak, bir ileti için en uzun yaşam süresi yedi gün olarak ayarlanır. İleti yaşam süresi için herhangi bir pozitif sayı belirtebilirsiniz. Aşağıdaki kod parçacığı süresi hiç dolmamış bir ileti ekler.
Süresi dolmayan bir ileti eklemek için çağrısında
SendMessageAsync
kullanınTimespan.FromSeconds(-1)
.await theQueue.SendMessageAsync(newMessage, default, TimeSpan.FromSeconds(-1), default);
Dosyayı kaydedin.
Kuyruk iletisinin UTF-8 kodlaması kullanan xml isteğiyle uyumlu bir biçimde olması gerekir. İleti boyutu en fazla 64 KB olabilir. bir ileti ikili veri içeriyorsa, Base64-iletiyi kodlayın .
İletileri sıralama
Kuyruktan ileti almak için yeni bir yöntem oluşturun. İleti başarıyla alındıktan sonra, birden çok kez işlenmemesi için iletinin kuyruktan silinmesi önemlidir.
Sınıfınıza
Program
adlıRetrieveNextMessageAsync
yeni bir yöntem ekleyin.Bu yöntem, yalnızca kuyruktaki bir sonraki iletiyi almak için ilk parametreyi geçirerek
1
çağrısıReceiveMessagesAsync
yaparak kuyruktan bir ileti alır. İleti alındıktan sonra çağrısıDeleteMessageAsync
yaparak kuyruktan silin.v12'den önceki bir SDK sürümüyle kuyruğa bir ileti gönderildiğinde, otomatik olarak Base64 ile kodlanır. v12'den itibaren bu işlevsellik kaldırıldı. v12 SDK'sını kullanarak bir iletiyi aldığınızda, ileti otomatik olarak Base64 ile kod çözmez. İçeriğin kodunu açıkça Base64 ile çözmeniz 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; }
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ıya kuyruğu silmek isteyip istemediğini sorun.
RetrieveNextMessageAsync
Boş kuyruğu 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."; } }
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 varsayalım. Dize oluşturmak için bağımsız değişkenleri birleştirin. Daha önce eklediğimiz yöntemi çağırarak bu dizeyi ileti kuyruğuna InsertMessageAsync
ekleyin.
Komut satırı bağımsız değişkeni yoksa, bir alma işlemi denemesi yapın. Kuyruktaki RetrieveNextMessageAsync
bir sonraki iletiyi almak için yöntemini çağırın.
Son olarak, çağrısı Console.ReadLine
yaparak çıkış yapmadan önce kullanıcı girişini bekleyin.
Main
Komut satırı bağımsız değişkenlerini denetlemek 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(); }
Dosyayı kaydedin.
Kodu tamamla
Bu projenin tam kod listesi aşağıdadı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
Projeyi oluşturmak için proje dizinindeki komut satırından aşağıdaki dotnet komutunu çalıştırın.
dotnet build
Proje başarıyla derlendikten 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..._
Kuyruktaki ilk iletiyi almak ve kaldırmak için komut satırı bağımsız değişkenleri olmadan uygulamayı çalıştırın.
dotnet run
Tüm iletiler kaldırılana kadar uygulamayı çalıştırmaya devam edin. Bir kez daha çalıştırırsanız kuyruğun boş olduğunu belirten bir ileti ve kuyruğu silme istemi 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:
- Bir kuyruk oluşturma
- Kuyrukta ileti ekleme ve kaldırma
- Azure Kuyruk Depolama kuyruğu silme
Daha fazla bilgi için Azure Kuyruk Depolama hızlı başlangıçlarına göz atın.
- .NET için kuyruklar hızlı başlangıcı
- Java için kuyruklar hızlı başlangıcı
- Python için kuyruklar hızlı başlangıcı
- JavaScript için kuyruklar hızlı başlangıcı
Kullanım dışı .NET sürüm 11.x SDK'larını kullanan ilgili kod örnekleri için bkz. .NET sürüm 11.x kullanan kod örnekleri.
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin