Verwenden von Queue Storage mit Ruby

Tipp

Testen des Microsoft Azure Storage-Explorers

Beim Microsoft Azure Storage-Explorer handelt es sich um eine kostenlose eigenständige App von Microsoft, über die Sie ganz einfach visuell mit Azure Storage-Daten arbeiten können – unter Windows, MacOS und Linux.

Übersicht

In diesem Leitfaden wird die Durchführung häufiger Szenarios mit dem Microsoft Azure-Warteschlangendienst erläutert. Die Beispiele wurden mit der Ruby Azure-API erstellt. Zu den Szenarien gehören das Einfügen, Einsehen, Abrufen und Löschen von Warteschlangennachrichten sowie das Erstellen und Löschen von Warteschlangen.

Was ist der Warteschlangenspeicher?

Die Warteschlangenspeicherung in Azure ist ein Dienst zur Speicherung großer Anzahlen von Nachrichten, auf die von überall auf der Welt mit authentifizierten Anrufen über HTTP oder HTTPS zugegriffen werden kann. Eine einzelne Warteschlangennachricht kann bis zu 64 KB groß sein, und eine Warteschlange kann Millionen von Nachrichten enthalten. Deren Anzahl ist nur durch die Kapazität des Speicherkontos begrenzt. Warteschlangenspeicher wird häufig verwendet, um ein Arbeits-Backlog zur asynchronen Verarbeitung zu erstellen.

Konzepte des Warteschlangendiensts

Der Azure-Warteschlangendienst umfasst die folgenden Komponenten:

Azure-Warteschlangendienst – Komponenten

  • Speicherkonto: Alle Zugriffe auf den Azure-Speicher erfolgen über ein Speicherkonto. Weitere Informationen zu Speicherkonten finden Sie in der Speicherkontoübersicht.

  • Warteschlange: Eine Warteschlange enthält einen Satz von Nachrichten. Alle Nachrichten müssen sich in Warteschlangen befinden. Beachten Sie, dass der Warteschlangenname nur aus Kleinbuchstaben bestehen darf. Informationen zum Benennen von Warteschlangen finden Sie unter Benennen von Warteschlangen und Metadaten.

  • Nachricht: Eine Nachricht in einem beliebigen Format und mit einer Größe von bis zu 64 KB. Eine Nachricht kann maximal sieben Tage in der Warteschlange verbleiben. Für Version 2017-07-29 oder höhere Versionen kann die maximale Gültigkeitsdauer eine beliebige positive Zahl sein. Mit -1 wird angegeben, dass die Nachricht nicht abläuft. Wird dieser Parameter ausgelassen, beträgt die Standardgültigkeitsdauer sieben Tage.

  • URL-Format: Warteschlangen sind über das folgende URL-Format adressierbar: http://<storage account>.queue.core.windows.net/<queue>

    Mit der folgenden URL kann eine der Warteschlangen im Diagramm adressiert werden:

    http://myaccount.queue.core.windows.net/incoming-orders

Erstellen eines Azure-Speicherkontos

Ihr erstes Azure-Speicherkonto erstellen Sie am einfachsten im Azure-Portal. Weitere Informationen finden Sie unter Erstellen von Speicherkonten.

Ein Azure-Speicherkonto können Sie auch mit Azure PowerShell, der Azure-Befehlszeilenschnittstelle oder dem Azure Storage-Ressourcenanbieter für .NET erstellen.

Wenn Sie zu diesem Zeitpunkt kein Speicherkonto in Azure erstellen möchten, können Sie auch den Azurite-Speicheremulator zum Ausführen und Testen Ihres Codes in einer lokalen Umgebung verwenden. Weitere Informationen finden Sie unter Verwenden des Azurite-Emulators für lokale Azure Storage-Entwicklung.

Erstellen einer Ruby-Anwendung

Erstellen Sie eine Ruby-Anwendung. Anweisungen finden Sie unter Erstellen einer Ruby-Anwendung in App Service unter Linux.

Konfigurieren der Anwendung für den Speicherzugriff

Um den Azure Storage zu verwenden, müssen Sie das Ruby-Azure-Paket, das eine Reihe von Bibliotheken enthält, die mit den Speicher-REST-Diensten kommunizieren, herunterladen und verwenden.

Verwenden von RubyGems zum Abrufen des Pakets

  1. Verwenden Sie eine Befehlszeilenschnittstelle wie PowerShell (Windows), Terminal (Mac) oder Bash (Unix).
  2. Geben Sie im Befehlsfenster gem install azure ein, um das Gem und Abhängigkeiten zu installieren.

Importieren des Pakets

Fügen Sie mit Ihrem bevorzugten Texteditor Folgendes oben in die Ruby-Datei an der Stelle ein, an der Sie den Speicher verwenden möchten:

require "azure"

Einrichten einer Azure Storage-Verbindung

Das Azure-Modul entnimmt den Umgebungsvariablen AZURE_STORAGE_ACCOUNT und AZURE_STORAGE_ACCESS_KEY die erforderlichen Informationen zum Herstellen einer Verbindung mit Ihrem Azure Storage-Konto. Wenn diese Umgebungsvariablen nicht festgelegt werden, müssen Sie die Kontoinformationen vor dem Verwenden von Azure::QueueService mit dem folgenden Code angeben:

Azure.config.storage_account_name = "<your azure storage account>"
Azure.config.storage_access_key = "<your Azure storage access key>"

So rufen Sie diese Werte aus einem klassischen oder Resource Manager-Speicherkonto im Azure-Portal ab

  1. Melden Sie sich beim Azure-Portalan.
  2. Navigieren Sie zum Speicherkonto, das Sie verwenden möchten.
  3. Klicken Sie auf dem Blatt Einstellungen auf der rechten Seite auf Zugriffsschlüssel.
  4. Auf dem angezeigten Blatt Zugriffsschlüssel sehen Sie „Zugriffsschlüssel 1“ und „Zugriffsschlüssel 2“. Sie können beide verwenden.
  5. Klicken Sie auf das Symbol „Kopieren“, um den Schlüssel in die Zwischenablage zu kopieren.

Gewusst wie: Erstellen einer Warteschlange

Durch folgenden Code wird ein Azure::QueueService -Objekt erstellt, das Ihnen das Arbeiten mit Warteschlangen ermöglicht.

azure_queue_service = Azure::QueueService.new

Mit der Methode create_queue() können Sie eine Warteschlange mit dem angegebenen Namen erstellen.

begin
  azure_queue_service.create_queue("test-queue")
rescue
  puts $!
end

Gewusst wie: Einfügen einer Nachricht in eine Warteschlange

Zum Einfügen einer Nachricht in eine Warteschlange verwenden Sie die create_message()-Methode, um eine neue Nachricht zu erstellen und zur Warteschlange hinzuzufügen.

azure_queue_service.create_message("test-queue", "test message")

Gewusst wie: Einsehen der nächsten Nachricht

Sie können einen Blick auf die Nachricht am Anfang einer Warteschlange werfen, ohne sie aus der Warteschlange zu entfernen, indem Sie die peek_messages()-Methode aufrufen. Standardmäßig wird von peek_messages() jeweils nur eine Nachricht angeschaut. Sie können jedoch auch angeben, wie viele Nachrichten Sie abrufen möchten.

result = azure_queue_service.peek_messages("test-queue",
  {:number_of_messages => 10})

Gewusst wie: Entfernen der nächsten Nachricht aus der Warteschlange

Sie können eine Nachricht in zwei Schritten aus der Warteschlange entfernen.

  1. Wenn Sie list_messages() aufrufen, wird standardmäßig die nächste Nachricht aus der Warteschlange abgerufen. Sie können jedoch auch angeben, wie viele Nachrichten Sie abrufen möchten. Die für list_messages() zurückgegebenen Nachrichten sind für anderen Code, mit dem Nachrichten aus dieser Warteschlange gelesen werden, nicht mehr sichtbar. Sie übergeben das Sichtbarkeits-Zeitlimit in Sekunden als Parameter.
  2. Um die Nachricht endgültig aus der Warteschlange zu entfernen, müssen Sie außerdem delete_message() aufrufen.

Dieser zweistufige Prozess zum Entfernen von Nachrichten stellt sicher, dass eine andere Codeinstanz dieselbe Nachricht erneut abrufen kann, falls die Verarbeitung aufgrund eines Hardware- oder Softwarefehlers fehlschlägt. In Ihrem Code wird delete_message() direkt nach der Verarbeitung der Nachricht aufgerufen.

messages = azure_queue_service.list_messages("test-queue", 30)
azure_queue_service.delete_message("test-queue",
  messages[0].id, messages[0].pop_receipt)

Gewusst wie: Ändern des Inhalts von Nachrichten in der Warteschlange

Sie können den Inhalt einer Nachricht vor Ort in der Warteschlange ändern. Im folgenden Codebeispiel wird die Methode update_message() verwendet, um eine Nachricht zu aktualisieren. Der Code gibt ein Tupel zurück, das den Pop-Beleg der Warteschlangennachricht und einen DateTime-Wert in UTC zurück, der angibt, wann die Nachricht in der Warteschlange sichtbar sein wird.

message = azure_queue_service.list_messages("test-queue", 30)
pop_receipt, time_next_visible = azure_queue_service.update_message(
  "test-queue", message.id, message.pop_receipt, "updated test message",
  30)

Vorgehensweise: Zusätzliche Optionen für das Entfernen von Nachrichten aus der Warteschlange

Es gibt zwei Möglichkeiten, wie Sie das Abrufen von Nachrichten aus der Warteschlange anpassen können.

  1. Sie können auch einen Nachrichtenstapel abrufen.
  2. Außerdem können Sie das Unsichtbarkeits-Zeitlimit verkürzen oder verlängern, sodass der Code mehr oder weniger Zeit zur vollständigen Verarbeitung jeder Nachricht benötigt.

Im folgenden Codebeispiel wird list_messages() verwendet, um 15 Nachrichten mit einem Aufruf abzurufen. Anschließend werden die Nachrichten ausgegeben und gelöscht. Außerdem wird das Unsichtbarkeits-Zeitlimit auf fünf Minuten pro Nachricht festgelegt.

azure_queue_service.list_messages("test-queue", 300
  {:number_of_messages => 15}).each do |m|
  puts m.message_text
  azure_queue_service.delete_message("test-queue", m.id, m.pop_receipt)
end

Gewusst wie: Abrufen der Warteschlangenlänge

Sie können die Anzahl der Nachrichten in einer Warteschlange schätzen lassen. Die Methode get_queue_metadata() gibt die ungefähre Anzahl der Nachrichten und andere Metadaten der Warteschlange zurück.

message_count, metadata = azure_queue_service.get_queue_metadata(
  "test-queue")

Gewusst wie: Löschen einer Warteschlange

Zum Löschen einer Warteschlange und aller darin enthaltenen Nachrichten rufen Sie die delete_queue()-Methode für das Warteschlangenobjekt auf.

azure_queue_service.delete_queue("test-queue")

Nächste Schritte

Nachdem Sie sich nun mit den Grundlagen von Queue Storage vertraut gemacht haben, folgen Sie diesen Links, um mehr über komplexere Speicheraufgaben zu erfahren.

Einen Vergleich zwischen Azure Queue Storage, das in diesem Artikel erläutert wird, und den unter Verwenden von Service Bus-Warteschlangen erörterten Azure Service Bus-Warteschlangen finden Sie unter Azure Queue Storage und Service Bus-Warteschlangen – Vergleich und Gegenüberstellung.