Ein Queue in Azure

Na dann arbeiten wir doch mal die Warteschlange ab – im wahrsten Sinne des Wortes. Einer der geplanten Artikel war ja über die Queues in Azure.

An sich gibt es zu der Queue in Azure nicht viel zu sagen – sie macht was man erwartet: Die Einträge in der Reihenfolge abarbeiten, in der sie eingegangen sind (FIFO). Somit lassen sich damit sehr schön Aufträge der Reihe nach verarbeiten.

In der Regel (natürlich nicht zwingend) wird man Queues mit einem Worker abarbeiten. Man frägt in bestimmten Zyklen die Queue, ob neue Nachrichten zum Verarbeiten vorliegen. Ist dies der Fall, so ruft man die Nachrichten der Reihe nach ab und verarbeitet diese. Es gibt dabei einige interessante Eigenschaften. Zum Beispiel lässt sich konfigurieren, ob die Nachricht nach dem Abrufen nach einer bestimmten Zeit wieder in der Queue erscheint, falls die Nachricht nicht komplett gelöscht wurde.

Dann schauen wir uns mal ein wenig Code an. Der Anfang wird immer in etwa so aussehen

1
2
3
4
5
6
7
8
9
10
11
12
13
14
string myStorageConnectionString = "Connection String hier einfügen";
string myCommandQueue = "mycommandqueue";
 
// Zum Storage Account verbinden
CloudStorageAccount storageAccount = CloudStorageAccount.Parse(myStorageConnectionString);
 
// CloudQueueClient erzeugen
CloudQueueClient queueClient = storageAccount.CreateCloudQueueClient();
 
// Referenz auf die Queue holen
CloudQueue queue = queueClient.GetQueueReference(myCommandQueue);
 
// Queue erzeugen, falls diese nicht existiert
queue.CreateIfNotExists();

Nun kann man …

// ... eine neue Nachricht in die Queue einfügen
queue.AddMessage(new CloudQueueMessage("CleanCommand"));
// ... eine Nachricht abrufen
CloudQueueMessage message = queue.GetMessage();
// ... mehrere Nachrichten abrufen (bessere Performance!)
int messageCount = 5;
IEnumerable<CloudQueueMessage> messageList = queue.GetMessages(messageCount);
// ... eine 'Vorschau' abrufen (Nachricht bleibt in der Queue)
CloudQueueMessage message = queue.PeekMessage();
// ... eine abgerufenen Nachricht aus der Queue löschen
queue.DeleteMessage(message);

Einige weitere Beispiele findet man hier: How to guide – queue service

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert