Azure Kuyruk Depolama ve Visual Studio’ya bağlı hizmetleri kullanmaya başlama (bulut hizmeti projeleri)

İpucu

Microsoft Azure Depolama Gezgini’ni deneyin

Microsoft Azure Depolama Gezgini, Microsoft’un Windows, macOS ve Linux üzerinde Azure Depolama verileriyle görsel olarak çalışmanızı sağlayan ücretsiz ve tek başına uygulamasıdır.

Genel Bakış

Önemli

Cloud Services (klasik) artık yeni müşteriler için kullanımdan kaldırılmıştır ve tüm müşteriler için 31 Ağustos 2024'te kullanımdan kaldırılacaktır. Yeni dağıtımlarda yeni Azure Resource Manager tabanlı dağıtım modeli Azure Cloud Services (genişletilmiş destek) kullanılmalıdır.

Bu makalede, Visual Studio Bağlı Hizmetler Ekle iletişim kutusunu kullanarak bir bulut hizmetleri projesinde Azure depolama hesabı oluşturduktan veya bu hesaba başvurdıktan sonra Visual Studio'da Azure Kuyruk depolamayı kullanmaya nasıl başlandığı açıklanır.

Kodda kuyruk oluşturmayı göstereceğiz. Ayrıca kuyruk iletilerini ekleme, değiştirme, okuma ve kaldırma gibi temel kuyruk işlemlerinin nasıl gerçekleştirileceğini de göstereceğiz. Örnekler C# koduyla yazılır ve .NET için Microsoft Azure Depolama İstemci Kitaplığı'nı kullanır.

Bağlı Hizmetler Ekle işlemi, projenizdeki Azure depolamaya erişmek için uygun NuGet paketlerini yükler ve depolama hesabının bağlantı dizesini proje yapılandırma dosyalarınıza ekler.

Azure Kuyruk depolama, HTTP veya HTTPS kullanan kimlik doğrulaması yapılmış çağrılar aracılığıyla dünyanın her yerinden erişilebilen çok sayıda iletinin depolanması için bir hizmettir. Tek bir kuyruk iletisinin boyutu 64 KB’ye kadar olabilir ve bir kuyrukta, depolama hesabının toplam kapasite sınırına kadar milyonlarca ileti bulunabilir.

Koddaki kuyruklara erişme

Visual Studio Cloud Services projelerindeki kuyruklara erişmek için Aşağıdaki öğeleri Azure Kuyruk depolamaya erişen herhangi bir C# kaynak dosyasına eklemeniz gerekir.

  1. C# dosyasının en üstündeki ad alanı bildirimlerinin bunları using deyimleri içerdiğinden emin olun.

    using Microsoft.Framework.Configuration;
    using Microsoft.WindowsAzure.Storage;
    using Microsoft.WindowsAzure.Storage.Queue;
    
  2. Depolama hesabı bilgilerinizi temsil eden bir CloudStorageAccount nesnesi alın. Azure hizmet yapılandırmasından depolama bağlantı dizenizi ve depolama hesabı bilgilerinizi almak için aşağıdaki kodu kullanın.

    CloudStorageAccount storageAccount = CloudStorageAccount.Parse(
    CloudConfigurationManager.GetSetting("<storage-account-name>_AzureStorageConnectionString"));
    
  3. Depolama hesabınızdaki kuyruk nesnelerine başvurmak için bir CloudQueueClient nesnesi alın.

    // Create the queue client.
    CloudQueueClient queueClient = storageAccount.CreateCloudQueueClient();
    
  4. Belirli bir kuyruğa başvurmak için bir CloudQueue nesnesi alın.

    // Get a reference to a queue named "messageQueue"
    CloudQueue messageQueue = queueClient.GetQueueReference("messageQueue");
    

NOT: Aşağıdaki örneklerde kodun önünde yukarıdaki kodun tümünü kullanın.

Kodda kuyruk oluşturma

Kodda kuyruk oluşturmak için CreateIfNotExists öğesine bir çağrı eklemeniz gerekir.

// Create the CloudQueue if it does not exist
messageQueue.CreateIfNotExists();

Kuyruğa ileti ekleme

Var olan kuyruğa ileti eklemek için yeni bir CloudQueueMessage nesnesi oluşturun ve AddMessage yöntemini çağırın.

CloudQueueMessage nesnesi bir dizeden (UTF-8 biçiminde) veya bayt dizisinden oluşturulabilir.

'Hello, World' iletisini ekleyen bir örnek aşağıda verilmiştir.

// Create a message and add it to the queue.
CloudQueueMessage message = new CloudQueueMessage("Hello, World");
messageQueue.AddMessage(message);

Kuyruktaki iletiyi okuma

PeekMessage yöntemini çağırarak iletiyi kuyruktan kaldırmadan kuyruğun önündeki iletiye göz atabilirsiniz.

// Peek at the next message
CloudQueueMessage peekedMessage = messageQueue.PeekMessage();

Kuyruktaki iletiyi okuma ve kaldırma

Kodunuz iki adımda bir iletiyi kuyruktan kaldırabilir (kuyruğu kaldırabilir).

  1. Kuyruktaki bir sonraki iletiyi almak için GetMessage'ı çağırın. GetMessage’dan dönen bir ileti bu kuyruktaki kod okuyan iletilere karşı görünmez olur. Varsayılan olarak bu ileti 30 saniye görünmez kalır.
  2. İletiyi kuyruktan kaldırmayı tamamlamak için DeleteMessage'ı çağırın.

Bir iletinin iki adımlı kaldırılma süreci, donanım veya yazılım arızasından dolayı kodunuzun bir iletiyi işleyememesi durumunda kodunuzun başka bir örneğinin aynı iletiyi alıp yeniden denemesini sağlar. Aşağıdaki kod, ileti işlendikten hemen sonra DeleteMessage'i çağırır.

// Get the next message in the queue.
CloudQueueMessage retrievedMessage = messageQueue.GetMessage();

// Process the message in less than 30 seconds

// Then delete the message.
await messageQueue.DeleteMessage(retrievedMessage);

Kuyruk iletilerini işlemek ve kaldırmak için ek seçenekleri kullanma

İletilerin bir kuyruktan alınma şeklini iki yöntemle özelleştirebilirsiniz.

  • Bir grup ileti alabilirsiniz (en fazla 32).
  • Kodunuzun her iletiyi tam olarak işlemesine daha fazla veya daha az zaman tanıyarak daha uzun veya daha kısa bir görünmezlik zaman aşımı ayarlayabilirsiniz. Aşağıdaki kod örneğinde tek çağrıda 20 ileti almak için GetMessages yöntemi kullanılmıştır. Ardından her ileti bir foreach döngüsü ile işlenir. Ayrıca her ileti için görünmezlik zaman aşımı beş dakika olarak ayarlanır. 5 dakikalık sürenin tüm iletiler için aynı zamanda başladığını unutmayın, bu nedenle GetMessages çağrısından itibaren 5 dakika geçtikten sonra silinmeyen tüm iletiler görünür olacaktır.

Aşağıda bir örnek verilmiştir:

foreach (CloudQueueMessage message in messageQueue.GetMessages(20, TimeSpan.FromMinutes(5)))
{
    // Process all messages in less than 5 minutes, deleting each message after processing.

    // Then delete the message after processing
    messageQueue.DeleteMessage(message);

}

Kuyruk uzunluğu alma

Bir kuyruktaki ileti sayısı ile ilgili bir tahmin alabilirsiniz. FetchAttributes yöntemi, ileti sayısı dahil olmak üzere Kuyruk hizmetinden kuyruk özniteliklerini almasını ister. ApproximateMethodCount özelliği, Queue hizmetini çağırmadan FetchAttributes yöntemi tarafından alınan son değeri döndürür.

// Fetch the queue attributes.
messageQueue.FetchAttributes();

// Retrieve the cached approximate message count.
int? cachedMessageCount = messageQueue.ApproximateMessageCount;

// Display number of messages.
Console.WriteLine("Number of messages in queue: " + cachedMessageCount);

Yaygın Azure Kuyruk API'leriyle Async-Await Desenini kullanma

Bu örnekte yaygın Azure Kuyruk API'leriyle Async-Await düzeninin nasıl kullanılacağı gösterilmektedir. Örnek, verilen yöntemlerin her birinin zaman uyumsuz sürümünü çağırır. Bu, her yöntemin zaman uyumsuz düzeltmesi tarafından görülebilir. Zaman uyumsuz yöntem kullanıldığında, async-await düzeni çağrı tamamlanana kadar yerel yürütmeyi askıya alır. Bu davranış, geçerli iş parçacığının performans sorunlarını önlemeye yardımcı olan ve uygulamanızın genel yanıt hızını artıran başka işler yapmasına olanak tanır. .NET’te Zaman Uyumsuz-Bekleme yönteminin kullanılması ile ilgili daha fazla ayrıntı için bkz. Zaman Uyumsuz ve Bekleme (C# ve Visual Basic).

// Create a message to put in the queue
CloudQueueMessage cloudQueueMessage = new CloudQueueMessage("My message");

// Add the message asynchronously
await messageQueue.AddMessageAsync(cloudQueueMessage);
Console.WriteLine("Message added");

// Async dequeue the message
CloudQueueMessage retrievedMessage = await messageQueue.GetMessageAsync();
Console.WriteLine("Retrieved message with content '{0}'", retrievedMessage.AsString);

// Delete the message asynchronously
await messageQueue.DeleteMessageAsync(retrievedMessage);
Console.WriteLine("Deleted message");

Bir kuyruk silme

Bir kuyruğu ve içinde yer alan tüm iletileri silmek için kuyruk nesnesindeki Sil yöntemini çağırın.

// Delete the queue.
messageQueue.Delete();

Sonraki adımlar

Azure kuyruk depolamanın temellerini öğrendiğinize göre, daha karmaşık depolama görevleri hakkında bilgi edinmek için bu bağlantıları izleyin.