.NET kullanarak Azure Kuyruk Depolama ve iletileri oluşturma ve yönetme
Bu ünitede bir .NET projesindeki kod parçacıklarını göstererek Azure Kuyruk Depolama'da kuyruk oluşturma ve iletileri yönetme konularını açıklayacağız.
Kod örnekleri aşağıdaki NuGet paketlerine dayanır:
- .NET için Azure.Core kitaplığını: Bu paket, modern .NET Azure SDK istemci kitaplıkları için paylaşılan temel öğeler, soyutlamalar ve yardımcılar sağlar.
- .NET için Azure.Storage.Common istemci kitaplığını: Bu paket, diğer Azure Depolama istemci kitaplıkları tarafından paylaşılan altyapıyı sağlar.
- .NET için Azure.Storage.Queues istemci kitaplığını: Bu paket, bir istemci tarafından erişilen iletileri depolamak için Azure Kuyruk Depolama ile çalışmayı sağlar.
- .NET için System.Configuration.ConfigurationManager kitaplığını: Bu paket, istemci uygulamaları için yapılandırma dosyalarına erişim sağlar.
Kuyruk hizmeti istemcisini oluşturma
QueueClient sınıfı, Kuyruk Depolaması'nda depolanan kuyrukları almanızı sağlar. Hizmet istemcisini oluşturmanın bir yolu aşağıdadır:
QueueClient queueClient = new QueueClient(connectionString, queueName);
Kuyruk oluşturma
Bu örnek, henüz mevcut değilse kuyruğun nasıl oluşturulacağını gösterir:
// Get the connection string from app settings
string connectionString = ConfigurationManager.AppSettings["StorageConnectionString"];
// Instantiate a QueueClient which will be used to create and manipulate the queue
QueueClient queueClient = new QueueClient(connectionString, queueName);
// Create the queue
queueClient.CreateIfNotExists();
Kuyruğa ileti ekleme
Var olan kuyruğa ileti eklemek için SendMessage yöntemini çağırın. İleti bir dize (UTF-8 biçiminde) veya bayt dizisi olabilir. Aşağıdaki kod bir kuyruk oluşturur (yoksa) ve bir ileti ekler:
// Get the connection string from app settings
string connectionString = ConfigurationManager.AppSettings["StorageConnectionString"];
// Instantiate a QueueClient which will be used to create and manipulate the queue
QueueClient queueClient = new QueueClient(connectionString, queueName);
// Create the queue if it doesn't already exist
queueClient.CreateIfNotExists();
if (queueClient.Exists())
{
// Send a message to the queue
queueClient.SendMessage(message);
}
Sonraki iletiye göz atma
PeekMessages yöntemini çağırarak kuyruktaki iletilere kuyruktan kaldırmadan göz atabilirsiniz.
maxMessages parametresi için bir değer geçirmezseniz, varsayılan değer bir iletiye göz atmaktır.
// Get the connection string from app settings
string connectionString = ConfigurationManager.AppSettings["StorageConnectionString"];
// Instantiate a QueueClient which will be used to manipulate the queue
QueueClient queueClient = new QueueClient(connectionString, queueName);
if (queueClient.Exists())
{
// Peek at the next message
PeekedMessage[] peekedMessage = queueClient.PeekMessages();
}
Kuyruğa alınan iletinin içeriğini değiştirme
Kuyruktaki bir iletinin içeriğini yerinde değiştirebilirsiniz. İleti bir iş görevini temsil ediyorsa, bu özelliği iş görevinin durumunu güncelleştirmek için kullanabilirsiniz. Aşağıdaki kod, kuyruk iletisini yeni içeriklerle güncelleştirir ve görünürlük zaman aşımını 60 saniye daha uzatacak şekilde ayarlar. Bu, iletiyle ilişkili çalışma durumunu kaydeder ve istemciye ileti üzerinde çalışmaya devam etmesi için bir dakika daha verir.
// Get the connection string from app settings
string connectionString = ConfigurationManager.AppSettings["StorageConnectionString"];
// Instantiate a QueueClient which will be used to manipulate the queue
QueueClient queueClient = new QueueClient(connectionString, queueName);
if (queueClient.Exists())
{
// Get the message from the queue
QueueMessage[] message = queueClient.ReceiveMessages();
// Update the message contents
queueClient.UpdateMessage(message[0].MessageId,
message[0].PopReceipt,
"Updated contents",
TimeSpan.FromSeconds(60.0) // Make it invisible for another 60 seconds
);
}
Sonraki iletiyi sıralama
İki adımda bir mesajı kuyruktan çıkarın.
ReceiveMessagesçağırdığınızda, kuyruktaki bir sonraki iletiyi alırsınız.
ReceiveMessages döndürülen bir ileti, bu kuyruktan gelen iletileri okuyan diğer kodlar için görünmez hale gelir. Varsayılan olarak, bu ileti 30 saniye boyunca görünmez kalır. kuyruktan iletiyi kaldırmayı tamamlamak için DeleteMessageçağırmanız da gerekir. Bir iletiyi kaldırmaya yönelik bu iki adımlı işlem, kodunuz donanım veya yazılım hatası nedeniyle bir iletiyi işleyemezse kodunuzun başka bir örneğinin aynı iletiyi alıp yeniden denemesini sağlar. kodunuz, ileti işlendikten hemen sonra DeleteMessage çağırır.
// Get the connection string from app settings
string connectionString = ConfigurationManager.AppSettings["StorageConnectionString"];
// Instantiate a QueueClient which will be used to manipulate the queue
QueueClient queueClient = new QueueClient(connectionString, queueName);
if (queueClient.Exists())
{
// Get the next message
QueueMessage[] retrievedMessage = queueClient.ReceiveMessages();
// Process (i.e. print) the message in less than 30 seconds
Console.WriteLine($"Dequeued message: '{retrievedMessage[0].Body}'");
// Delete the message
queueClient.DeleteMessage(retrievedMessage[0].MessageId, retrievedMessage[0].PopReceipt);
}
Kuyruk uzunluğunu alma
Kuyruktaki ileti sayısıyla ilgili bir tahmin alabilirsiniz.
GetProperties yöntemi, ileti sayısı dahil olmak üzere kuyruk özelliklerini döndürür.
ApproximateMessagesCount özelliği kuyruktaki yaklaşık ileti sayısını içerir. Bu sayı kuyruktaki gerçek ileti sayısından düşük değildir, ancak daha yüksek olabilir.
/// Instantiate a QueueClient which will be used to manipulate the queue
QueueClient queueClient = new QueueClient(connectionString, queueName);
if (queueClient.Exists())
{
QueueProperties properties = queueClient.GetProperties();
// Retrieve the cached approximate message count.
int cachedMessagesCount = properties.ApproximateMessagesCount;
// Display number of messages.
Console.WriteLine($"Number of messages in queue: {cachedMessagesCount}");
}
Bir kuyruğu sil
Bir kuyruğu ve içindeki tüm iletileri silmek için kuyruk nesnesinde Delete yöntemini çağırın.
/// Get the connection string from app settings
string connectionString = ConfigurationManager.AppSettings["StorageConnectionString"];
// Instantiate a QueueClient which will be used to manipulate the queue
QueueClient queueClient = new QueueClient(connectionString, queueName);
if (queueClient.Exists())
{
// Delete the queue
queueClient.Delete();
}