Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
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 eğitimde şunları öğreniyorsunuz:
- Azure Depolama hesabı oluşturma
- Uygulamayı oluşturma
- Azure istemci kitaplıklarını ekleme
- Zaman uyumsuz kod için destek ekleme
- Kuyruk oluştur
- 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
Prerequisites
- Platformlar arası Visual Studio Code düzenleyicisinin ücretsiz kopyasını edinin.
- .NET Core SDK sürüm 3.1 veya sonraki bir sürümü indirin ve 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.
Kullanıcı hesabınıza, depolama hesabı, üst kaynak grubu veya abonelik kapsamında Depolama Kuyruğu Verileri Katkıda Bulunanı rolü atandığından emin olun. Bkz. Azure'da kimlik doğrulaması.
Uygulamayı oluşturma
adlı QueueAppbir .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ı
dotnet newyeni bir konsol uygulaması oluşturmak için komutunu kullanınQueueApp. Bu komut, adlıProgram.cstek bir kaynak dosyasıyla basit bir "merhaba dünya" C# projesi oluşturur.dotnet new console -n QueueAppYeni oluşturulan
QueueAppklasöre geçin ve her şeyin yolunda olduğunu doğrulamak için uygulamayı oluşturun.cd QueueAppdotnet buildAş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 packageAzure 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 ifadeleri ekle
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.csKaynak 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.csDosyayı kaydedin.
Zaman uyumsuz kod için destek ekleme
Uygulama bulut kaynaklarını kullandığından kod zaman uyumsuz olarak çalışır.
Mainyöntemini zaman uyumsuz olarak çalışacak şekilde güncelleştirin.voidifadesini birasync Taskdönüş değeriyle değiştirin.static async Task Main(string[] args)Program.csDosyayı kaydedin.
Kuyruk oluştur
Azure API'lerine çağrı yapmadan önce, rolü atadığınız Microsoft Entra hesabıyla kimliğinizin doğrulanmış olduğundan emin olmanız gerekir. Kimlik doğrulamasından geçtikten sonra, QueueClient nesnesi oluşturabilir ve yetkilendirebilir, ardından DefaultAzureCredential kullanarak depolama hesabındaki kuyruk verilerine erişebilirsiniz.
DefaultAzureCredential oturum açtığınız hesabı otomatik olarak bulur ve kullanır. Oturum açmayı ve sonra nesne QueueClient oluşturmayı öğrenmek için bkz. Erişimi yetkilendirme ve istemci nesnesi oluşturma.
Kuyruğa ileti ekleme
Kuyruğa ileti göndermek için yeni bir yöntem oluşturun.
Aşağıdaki
InsertMessageAsyncmetodunuProgramsınıfınıza ekleyin.Bu yönteme bir kuyruk referansı geçirilir. Henüz mevcut değilse,
CreateIfNotExistsAsyncçağrısıyla yeni bir kuyruk oluşturulur. ArdındannewMessageçağrısını çalıştırarakSendMessageAsyncöğesini kuyruğa ekler.static async Task InsertMessageAsync(QueueClient theQueue, string newMessage) { if (null != await theQueue.CreateIfNotExistsAsync()) { Console.WriteLine("The queue was created."); } await theQueue.SendMessageAsync(newMessage); }Opsiyonel: Varsayılan olarak, bir ileti için en uzun yaşam süresi yedi gün olarak ayarlanır. Mesaj 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
Timespan.FromSeconds(-1)öğesiniSendMessageAsyncçağrınızda kullanın.await theQueue.SendMessageAsync(newMessage, default, TimeSpan.FromSeconds(-1), default);Dosyayı kaydedin.
Kuyruk iletisi, UTF-8 kodlaması kullanan xml isteğiyle uyumlu bir biçimde olmalıdır. İletinin 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 kuyruktan silinmesi önemlidir.
Sınıfınıza
RetrieveNextMessageAsyncadlıProgramyeni bir yöntem ekleyin.Bu yöntem,
ReceiveMessagesAsyncçağrılarak kuyruğa erişir ve yalnızca kuyruğun bir sonraki iletisini almak için ilk parametre olarak1geçirir. Mesaj alındıktan sonra, onu kuyruktan silmek içinDeleteMessageAsyncçağırın.v12'den önceki bir SDK sürümüyle kuyruğa bir ileti gönderildiğinde, otomatik olarak Base64 ile kodlanır. v12'den başlayarak bu işlev kaldırıldı. v12 SDK'sını kullanarak bir ileti aldığınızda, ileti otomatik olarak Base64 çözülmez. İçeriğin kodunu base64 ile kendiniz çö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 sonunda en iyi yöntemdir. Çalışır durumda bırakılan kaynaklar sana pahalıya mal olabilir. Kuyruk mevcutsa ancak boşsa, kullanıcıya silmek isteyip istemediğini sorun.
RetrieveNextMessageAsyncyöntemini, boş kuyruğu silmek için bir istem ekleyecek şekilde 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
Varsayalım uygulamaya geçirilen herhangi bir komut satırı argümanı varsa, bunların kuyruğa eklenmesi gereken bir mesaj olduğunu. Argümanları birleştirerek bir dize yapın. Daha önce eklediğimiz yöntemi çağırarak bu dizeyi ileti kuyruğuna InsertMessageAsync ekleyin.
Komut satırı argümanı yoksa bir alma işlemi deneyin. Kuyruktaki bir sonraki iletiyi almak için RetrieveNextMessageAsync yöntemini çağırın.
Son olarak, çağrısı Console.ReadLineyaparak çıkmadan önce kullanıcı girişini bekleyin.
Mainyöntemi genişleterek komut satırı bağımsız değişkenlerini denetleyin ve kullanıcı girişini bekleyin. Aşağıdaki kod parçasında{storageAccountName}yer tutucusunu depolama hesabınızın adıyla değiştirdiğinizden emin olun.static async Task Main(string[] args) { QueueClient queue = new QueueClient( new Uri($"https://{storageAccountName}.queue.core.windows.net/mystoragequeue"), new DefaultAzureCredential()); 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 tamamlama
Bu projenin tam kod listesi aşağıdadır.
using System;
using System.Threading.Tasks;
using Azure.Storage.Queues;
using Azure.Storage.Queues.Models;
using Azure.Identity;
namespace QueueApp
{
class Program
{
static async Task Main(string[] args)
{
QueueClient queue = new QueueClient(
new Uri($"https://{storageAccountName}.queue.core.windows.net/mystoragequeue"),
new DefaultAzureCredential());
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
Proje dizinindeki komut satırından aşağıdaki dotnet komutunu çalıştırarak projeyi derleyin.
dotnet buildProje 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 çıktıyı 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 runTü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ılacağını öğrendiniz:
- Kuyruk oluştur
- Kuyrukta ileti ekleme ve kaldırma
- Azure Sıra Depolama kuyruğunu silme
Daha fazla bilgi için Azure Kuyruk Depolama hızlı başlangıç kılavuzları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ıç Kılavuzu
- JavaScript için kuyruklar hızlı başlangıç rehberi
Kullanım dışı bırakılan .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.