Microsoft Azure Queue API

Aus RAD Studio
Wechseln zu: Navigation, Suche

Nach oben zu Azure- und Cloud-Computing mit DataSnap


Warnung: Die DSAzure-API ist veraltet und wurde durch die Data.Cloud.AzureAPI ersetzt. Es wird empfohlen, die neue API für die Entwicklung von Cloud-Computing-Anwendungen zu verwenden. Weitere Informationen finden Sie unter Cloud-Computing mit DataSnap.

Die Microsoft Azure Queue API befindet sich in der Unit DSAzure in der Klasse TAzureQueueService. Ein Beispiel dazu, wie die API verwendet wird, finden Sie im Abschnitt "implementation" der Unit DSAzureQueue. Diese visuelle Komponente verwendet die API.

Zu den verfügbaren Funktionen zählen: Auflisten der verfügbaren Queues, Erstellen einer Queue, Löschen einer Queue, Ermitteln der Metadaten für eine Queue, Setzen der Metadaten für eine Queue, Hinzufügen einer Nachricht zu einer Queue, Entfernen einer Nachricht aus einer Queue und Löschen aller Queue-Nachrichten.

Die folgenden Anweisungen setzten voraus, dass Sie bereits eine Instanz von TAzureQueueService erstellt haben. In den Codefragmenten wird diese Instanz mit FQueueService bezeichnet. Darüber hinaus wird vorausgesetzt, dass Sie über einen XML-Parser verfügen und dass dieser bereits entsprechend konfiguriert ist. Die API gibt in einigen Fällen XML-Code zurück. Sie müssen in der Lage sein, XML-Code zu analysieren.

Auflisten der verfügbaren Queues

Um die verfügbaren Queues aufzulisten, gehen Sie folgendermaßen vor:


xml := FQueueService.ListQueues([],[]);

Sie erhalten nun eine XML-Antwort, die etwa folgendermaßen aussieht:


<EnumerationResults AccountName="...">
  ...
  <Queues>
    <Queue>
      <Name>queue-name</Name>
      <Url>queue-address</Url>
    </Queue>
  ...

Erstellen einer Queue

Führen Sie zum Erstellen einer Queue den folgenden Aufruf aus:


FQueueService.CreateQueue('queue-name');

Der Queue-Name muss den folgenden Konventionen entsprechen:

  • Der Name muss mindestens drei Zeichen lang sein.
  • Der Name darf nur Buchstaben, Zahlen und Bindestriche enthalten.
  • Der Name darf nicht mit einem Bindestrich beginnen.
  • Der Name muss in Kleinbuchstaben geschrieben sein.

Löschen einer Queue

Zum Löschen einer Queue rufen Sie einfach Folgendes auf:


FQueueService.DeleteQueue('queue-name');

Wenn das Löschen erfolgreich war, wird True zurückgegeben. Das Löschen auf dem Server kann etwas dauern. Wenn Sie eine neue Queue mit demselben Namen wie die gerade gelöschte erstellen, könnte diese Aktion daher fehlschlagen.

Ermitteln der Metadaten für eine Queue

Um einen Metadatenwert aus einer Queue zu lesen, können Sie folgendermaßen vorgehen:


if FQueueService.GetQueueMetadata('queue-name') then
begin
  Result := FQueueService.ResponseHeader['metadata-key-name'];
end;

Der erste Aufruf von GetQueueMetadata gibt True oder False zurück, je nachdem, ob die Metadaten erfolgreich aufgerufen werden konnten oder nicht. Zum Lesen der eigentlichen Metadaten greifen Sie auf die Eigenschaft ResponseHeader der Dienstinstanz zu.

Setzen der Metadaten für eine Queue

Zum Bearbeiten der Metadaten der Queue können Sie FQueueService aufrufen. PutQueueMetadata('queue-name', MetaData), wobei MetaData eine TStringList mit Schlüssel/Wert-Paaren ist.

Ermitteln der Nachrichten einer Queue

Um die Nachrichten einer Queue mit dem Namen queue-name zu ermitteln, ohne die Nachrichten aus der Queue zu entfernen, gehen Sie folgendermaßen vor:


xml := FQueueService.PeekMessages('queue-name', MsgRetrieveNum);

MsgRetrieveNum ist hier eine Ganzzahl von 1 bis 32. Wenn ein Wert kleiner 1 übergeben wird, gibt der Server eine einzelne Nachricht zurück. Wenn ein Wert größer als 32 angegeben wird, kann dies zu unzuverlässigen Ergebnissen führen, sollte aber im Allgemeinen die maximale Anzahl von Nachrichten (32) zurückgeben.

Der zurückgegebene XML-Code sieht folgendermaßen aus:


<QueueMessagesList>
    <QueueMessage>
      <MessageId>message-id</MessageId>
      <InsertionTime>insertion-time</InsertionTime>
      <ExpirationTime>expiration-time</ExpirationTime>
      <DequeueCount>integer</DequeueCount>
      <MessageText>queue-message-string</MessageText>
    </QueueMessage>
</QueueMessagesList>

Es ist wichtig, die Referenz auf die Nachrichten-ID (MessageId) für die spätere Verwendung zu protokollieren, da damit die spezifische Nachricht identifiziert wird. Dies ist beispielsweise für das Löschen der einzelnen Queue-Nachricht erforderlich.

Wenn Sie überprüfen möchten, ob die Queue mehr als die zurückgegebene Anzahl an Nachrichten enthält, können Sie die Gesamtanzahl der Nachrichten in der Queue folgendermaßen abfragen:


if FQueueService.GetQueueMetadata('queue-name') then
begin
  ValS := FQueueService.ResponseHeader['x-ms-approximate-messages-count'];
  Result := StrToInt(ValS);
end;

Löschen von Nachrichten aus einer Queue

Sie können entweder eine einzelne Nachricht oder alle Nachrichten löschen. Zum Löschen einer einzelnen Nachricht müssen Sie diese zunächst ermitteln (Get). Sie erhalten so ein PopReceipt und können dann damit die spezifische Nachricht löschen. Der Code dafür sieht etwa folgendermaßen aus:


xml := FQueueService.GetMessages('queue-name', 1);
popReceipt := FQueueService.GetPopReceipt(xml);
if popReceipt <> EmptyStr then
  Success := FQueueService.DeleteMessage('queue-name', MessageId, popReceipt);

Die MessageId ist dieselbe, die im XML-Code beim Ermitteln der Liste der Queue-Nachrichten zurückgegeben wurde. Beim Aufruf von GetMessages übergeben Sie den Wert 1, was bewirkt, dass nur die oberste Nachricht entfernt wird.

Sie können auch alle Nachrichten in einer Queue löschen, ohne die Queue selbst zu löschen. Verwenden Sie dazu den folgenden Code:


Success := FQueueService.ClearMessages('queue-name');

Wenn die Aktion erfolgreich war, wird true, ansonsten false zurückgegeben.

Hinzufügen einer Nachricht zu einer Queue

Um einer Queue eine Nachricht hinzuzufügen, führen Sie einfach den folgenden Aufruf aus:


Success := FQueueService.PutMessage('queue-name', MessageString);

MessageString ist hier der String, der in der Nachricht gespeichert werden soll.

Siehe auch