Tworzenie usługi Azure Queue Storage i komunikatów oraz zarządzanie nimi przy użyciu platformy .NET
W tej lekcji omówimy sposób tworzenia kolejek i zarządzania komunikatami w usłudze Azure Queue Storage, pokazując fragmenty kodu z projektu platformy .NET.
Przykłady kodu bazują na następujących pakietach NuGet:
- Biblioteka Azure.Core dla platformy .NET: Ten pakiet dostarcza współdzielone prymitywy, abstrakcje oraz pomocniki dla nowoczesnych bibliotek klienckich platformy .NET Azure SDK.
- Azure.Storage.Common biblioteki klienta dla platformy .NET. Pakiet ten udostępnia współdzieloną infrastrukturę przez inne biblioteki klienckie usługi Azure Storage.
- Biblioteka klienta Azure.Storage.Queues dla platformy .NET: ten pakiet umożliwia pracę z usługą Azure Queue Storage na potrzeby przechowywania komunikatów, do których uzyskuje dostęp klient.
- Biblioteka System.Configuration.ConfigurationManager dla platformy .NET: ten pakiet zapewnia dostęp do plików konfiguracji dla aplikacji klienckich.
Tworzenie klienta usługi kolejkowania
Klasa QueueClient
umożliwia pobieranie kolejek przechowywanych w usłudze Queue Storage. Oto jeden ze sposobów tworzenia klienta usługi:
QueueClient queueClient = new QueueClient(connectionString, queueName);
Utwórz kolejkę
W tym przykładzie pokazano, jak utworzyć kolejkę, jeśli jeszcze nie istnieje:
// 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();
Wstaw komunikat do kolejki
Aby wstawić komunikat do istniejącej kolejki, wywołaj metodę SendMessage
. Komunikat może być ciągiem (w formacie UTF-8) lub tablicą bajtów. Poniższy kod tworzy kolejkę (jeśli nie istnieje) i wstawia komunikat:
// 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);
}
Przyjrzyj się następnej wiadomości
Komunikaty w kolejce można podejrzeć, nie usuwając ich z kolejki, wywołując metodę PeekMessages
. Jeśli nie przekażesz wartości parametru maxMessages
, wartością domyślną jest sprawdzanie jednego komunikatu.
// 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();
}
Zmiana zawartości komunikatu w kolejce
Zawartość komunikatu można zmienić w kolejce. Jeśli komunikat reprezentuje zadanie robocze, możesz użyć tej funkcji, aby zaktualizować stan zadania roboczego. Poniższy kod aktualizuje komunikat kolejki o nową zawartość i ustawia limit czasu widoczności, aby przedłużyć kolejne 60 sekund. Spowoduje to zapisanie stanu pracy skojarzonej z komunikatem i daje klientowi kolejną minutę na kontynuowanie pracy nad komunikatem.
// 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
);
}
Usuń z kolejki następną wiadomość
Usuń wiadomość z kolejki w dwóch krokach. Po wywołaniu ReceiveMessages
, zostanie wyświetlony następny komunikat w kolejce. Komunikat zwrócony z ReceiveMessages
staje się niewidoczny dla jakiegokolwiek innego kodu odczytującego wiadomości z tej kolejki. Domyślnie komunikat pozostanie niewidoczny przez 30 sekund. Aby zakończyć usuwanie komunikatu z kolejki, należy również wywołać metodę DeleteMessage
. Ten dwuetapowy proces usuwania komunikatów gwarantuje, że jeśli kod nie będzie w stanie przetworzyć komunikatu z powodu awarii sprzętu lub oprogramowania, inne wystąpienie kodu będzie w stanie uzyskać ten sam komunikat i ponowić próbę. Twój kod wywołuje DeleteMessage
, bezpośrednio po przetworzeniu wiadomości.
// 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);
}
Uzyskaj długość kolejki
Możesz oszacować ilość wiadomości w kolejce. Metoda GetProperties
zwraca właściwości kolejki, w tym liczbę komunikatów. Właściwość ApproximateMessagesCount
zawiera przybliżoną liczbę komunikatów w kolejce. Podana liczba nie jest mniejsza niż rzeczywista liczba komunikatów w kolejce, ale może być większa.
/// 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}");
}
Usuń kolejkę
Aby usunąć kolejkę i wszystkie zawarte w niej komunikaty, wywołaj metodę Delete
w obiekcie kolejki.
/// 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();
}