.NET kullanarak Azure Kuyruk Depolama ve iletileri oluşturma ve yönetme

Tamamlandı

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:

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();
}