Freigeben über


Senden von verwandten Service Bus-Nachrichten in einer bestimmten Reihenfolge mithilfe eines sequenziellen Konvois in Azure Logic Apps

Gilt für: Azure Logic Apps (Verbrauch + Standard)

Einige Szenarien erfordern, dass Ihr Workflow sitzungsbezogene Nachrichten in einer bestimmten Reihenfolge aus einer Azure Service Bus-Warteschlange verarbeitet. Diese Nachrichten haben eine Eigenschaft, die die Beziehung miteinander definiert, z. B. eine Sitzungs-ID. Um diese Nachrichten nach Sitzung zu verarbeiten, richten Sie ein sequenzielles Konvoymuster in Ihrem Workflow ein.

Angenommen, es gibt eine Service Bus-Warteschlange, die Nachrichten aus mehreren Sitzungen empfängt. Sie haben 10 Nachrichten aus einer Sitzung mit dem Namen Session 1 und 5 Nachrichten aus einer Sitzung mit dem Namen "Session 2". Sie können einen Workflow erstellen, der zwischen Sitzungen wechselt, um Nachrichten aus der Warteschlange zu verarbeiten. Wenn der Trigger zum ersten Mal ausgelöst wird, verarbeitet der Workflow alle Nachrichten aus Sitzung 1. Wenn der Trigger erneut ausgelöst wird, verarbeitet der Workflow alle Nachrichten aus Sitzung 2.

Das Diagramm zeigt das allgemeine sequenzielle Konvoymuster.

In diesem Handbuch wird gezeigt, wie Sie einen Workflow erstellen, der das sequenzielle Konvoymuster einrichte, um die folgenden allgemeinen Schritte auszuführen:

  1. Wenn der Dienstbus-Trigger namens Wenn eine Nachricht in einer Warteschlange empfangen wird (Peek-Lock) ausgelöst wird, führen Sie den Workflow aus.

    Weitere Informationen zum Vorschausperrmodus finden Sie unter Empfangsmodi und Vorschausperre.

  2. Initialisieren Sie eine Sitzung basierend auf der Nachricht, die der Trigger aus der ServiceBus-Warteschlange liest.

  3. Lesen und Verarbeiten aller Nachrichten aus derselben Sitzung in der Warteschlange während der aktuellen Workflowausführung.

Für Standardlogik-Apps können Sie einen Workflow mithilfe der Vorlage " Azure Service Bus: Verarbeiten verwandter Nachrichten aus einer sitzungsfähigen Warteschlange für dieselbe Workflowinstanz – Sequenzielles Konvoymuster" erstellen.

Für Verbrauchsworkflows ist im Designer keine Workflowvorlage verfügbar, daher müssen Sie den Workflow manuell erstellen. Sie können auch die Vorlage für Standardworkflows oder die JSON-Datei für die ehemals verfügbare Vorlage mit dem Namen „Korrelierte In-Order-Zustellung mit Servicebus-Sitzungen“ überprüfen, die unter GitHub: service-bus-sessions.json verfügbar ist.

Voraussetzungen

Überprüfen des Zugriffs auf den Service Bus-Namespace

Ihre Logik-App-Ressource und Ihr Workflow benötigen Berechtigungen für den Zugriff auf Ihren Service Bus-Namespace. Wenn Sie nicht sicher sind, ob Ihr Workflow über Berechtigungen verfügt, überprüfen Sie sie jetzt.

  1. Suchen Und wählen Sie im Azure-Portal Ihren Service Bus-Namespace aus.

  2. Wählen Sie im Randleistenmenü unter "Einstellungen"die Option "Richtlinien für den freigegebenen Zugriff" aus. Überprüfen Sie, ob Sie über Die Berechtigung "Verwalten " für diesen Namespace verfügen.

    Screenshot der Seite

  3. Rufen Sie die Verbindungszeichenfolge für Ihren Service Bus-Namespace ab, indem Sie die folgenden Schritte ausführen:

    1. Wählen Sie auf der Seite "Freigegebene Zugriffsrichtlinien" unter "Richtlinie" "RootManageSharedAccessKey" aus.

    2. Wählen Sie im Bereich SAS-Richtlinie: RootManageSharedAccessKey neben der primären Verbindungszeichenfolge die Schaltfläche Kopieren aus.

      Screenshot der Richtlinien für den freigegebenen Zugriff, in denen Sie eine Service Bus-Namespace-Verbindungszeichenfolge kopieren können.

      Tipp

      Überprüfen Sie die Verbindungszeichenfolge für den EntityPath Parameter, um sicherzustellen, dass Ihre Verbindungszeichenfolge ihrem Service Bus-Namespace und nicht einer Messaging-Entität zugeordnet ist, z. B. eine Warteschlange. Wenn Sie diesen Parameter gefunden haben, gilt die Verbindungszeichenfolge für eine bestimmte Entität und ist nicht zur Verwendung mit Ihrem Workflow geeignet.

    3. Speichern Sie die Verbindungszeichenfolge für die spätere Verwendung, wenn Sie eine Verbindung von Ihrem Workflow mit dem Namespace herstellen.

Erstellen eines sequenziellen Konvoyworkflows

Je nachdem, ob Ihre Logik-App-Ressource "Standard" oder "Verbrauch" ist, führen Sie die entsprechenden Schritte aus.

Diese Schritte erstellen einen Workflow aus der Vorlage namens Azure Service Bus: Verarbeiten verwandter Nachrichten aus einer sitzungsfähigen Warteschlange für dieselbe Workflowinstanz – Sequenzielles Konvoymuster. Die Vorlage enthält den Auslöser und die Aktionen zum Implementieren dieses Workflowmusters. Darüber hinaus stellen Sie eine Verbindung mit Ihrem Service Bus-Namespace her und geben den Namen für die Service Bus-Warteschlange an, die verwendet werden soll.

  1. Öffnen Sie im Azure-Portal Ihre Ressource vom Typ „Logic App (Standard)“.

  2. Im Randleistenmenü unter Workflows wählen Sie Workflows aus.

  3. Wählen Sie auf der Symbolleiste "Workflows " die Option "Aus Vorlage erstellen">aus.

  4. Wählen Sie unter "Vorlagen" die Vorlage " Azure Service Bus: Verarbeiten verwandter Nachrichten aus einer sitzungsfähigen Warteschlange für dieselbe Workflowinstanz – Sequenzielles Konvoymuster" aus, und wählen Sie dann "Diese Vorlage verwenden" aus.

    Das folgende Beispiel zeigt teilweise den Workflowvorlagenkatalog:

    Screenshot einer Seite, auf der Sie eine Vorlage für Servicebussitzungen auswählen können.

  5. Führen Sie im Bereich "Neuen Workflow aus Vorlagenbereich erstellen " die folgenden Schritte aus:

    1. Führen Sie auf der Registerkarte " Grundlagen " die folgenden Schritte aus:

      1. Geben Sie einen Namen für Ihren Workflow ein.

        Der Name muss mit einem Buchstaben beginnen und darf nur Buchstaben, Zahlen, Striche und Unterstriche enthalten.

      2. Wählen Sie "Statuslos" oder "Statuslos" aus, basierend auf Ihrem Szenario.

      3. Wählen Sie Weiteraus.

    2. Führen Sie auf der Registerkarte "Verbindungen " die folgenden Schritte aus:

      1. Wählen Sie für Service Bus in der Spalte "Verbindung " die Option "Verbinden" aus.

        Screenshot des Bereichs zum Starten der Verbindung mit dem Azure Service Bus-Namespace.

      2. Geben Sie die folgenden Informationen an:

        Parameter Wert BESCHREIBUNG
        Verbindungsname < Verbindungsname> Der Name für die Verbindung mit Ihrem Service Bus-Namespace.
        Authentifizierungstyp Verbindungszeichenfolge Der zu verwendende Authentifizierungstyp.
        Verbindungszeichenfolge < namespace-connection-string> Die Verbindungszeichenfolge, die Sie zuvor im Service Bus-Namespace gespeichert haben.

        Screenshot des ServiceBus-Verbindungsbereichs im Standardworkflow.

      3. Wenn Sie fertig sind, wählen Sie "Verbindung>hinzufügen" aus.

    3. Führen Sie auf der Registerkarte "Parameter " die folgenden Schritte aus:

      1. Geben Sie die folgenden Informationen an:

        Parameter BESCHREIBUNG
        Warteschlangenname Der Name für die sitzungsfähige ServiceBus-Warteschlange mit den zu verarbeitenden Nachrichten.
        Maximale Batchgröße Die maximale Anzahl von Nachrichten, die als Batch abgerufen werden sollen.
      2. Wenn Sie fertig sind, wählen Sie Weiter.

    4. Überprüfen Sie die bereitgestellten Informationen, und wählen Sie "Erstellen" aus.

    Der Designer zeigt einen Workflow, der den Trigger "Wenn Nachrichten in einer Warteschlange verfügbar sind (Peek-Lock) und verschiedene Aktionen enthält, z. B.:

    Screenshot des Workflows mit allen Vorgängen.

    Dieser Workflow enthält vordefinierte umgebungsübergreifende Parameter, um Werte abzustrahieren, die sich in verschiedenen Umgebungen ändern, in denen Ihr Workflow ausgeführt wird, z. B. Entwicklung, Test und Produktion. Viele Vorgänge im Workflow verwenden diese Parameter anstelle hartcodierter Werte.

    In der folgenden Tabelle werden die folgenden umgebungsübergreifenden Parameter beschrieben:

    Name Typ Wert BESCHREIBUNG
    delayInMinutes_<workflow-name> Integer 0 Die Anzahl der Minuten, die gewartet werden sollen, bevor das Nachrichtensperrtoken erneuert wird.
    messageBatchSize_<workflow-name> Integer 50 Die Anzahl der Nachrichten für den aktuellen Batch.
    queueName_<workflow-name> String <Service-Bus-queue-name> Der Name für Ihre Service-Bus-Warteschlange.

    Weitere Informationen finden Sie unter Erstellen von umgebungsübergreifenden Parametern für Workfloweingaben.

  6. Wenn Sie mehr über die vordefinierten Vorgänge im Workflow erfahren möchten, fahren Sie mit dem nächsten Abschnitt fort.

Workflow-Vorgänge

In den folgenden Abschnitten werden die vordefinierten Vorgänge im Workflow beschrieben.

Wenn Nachrichten in einer Warteschlange verfügbar sind (Vorschausperre)

Dieser integrierte Azure Service Bus-Trigger wartet auf eine oder mehrere Nachrichten, um in einer angegebenen Servicebus-Warteschlange einzutreffen. Wenn eine Nachricht in der Warteschlange vorhanden ist, wird der Trigger ausgelöst und führt eine Workflowinstanz aus. Peek-Lock bedeutet, dass der Trigger eine Anforderung zum Abrufen einer Nachricht aus der Warteschlange sendet. Wenn eine Nachricht vorhanden ist, ruft der Trigger die Nachricht ab und sperrt sie, damit keine weitere Verarbeitung für diese Nachricht erfolgt, bis die Sperrfrist abgelaufen ist. Der Trigger gibt auch ein ServiceBusMessage-Objekt aus.

In der folgenden Tabelle werden die vorgefüllten Triggerparameter beschrieben.

Parameter Wert BESCHREIBUNG
Warteschlangenname queueName_<workflow-name> Der vordefinierte umgebungsübergreifende Parameter, der Ihre ServiceBus-Warteschlange angibt. Führen Sie die folgenden Schritte aus, um diesen Wert festzulegen:

1. Wählen Sie innerhalb des Namensfelds "Warteschlange " aus, und wählen Sie dann das Blitzsymbol aus, um die dynamische Inhaltsliste zu öffnen.
2. Wählen Sie in der Liste die Option queueName_<workflow-name>aus.
Warteschlangentyp Hauptseite Dieser Standardtyp bezieht sich auf Ihre primäre Servicebus-Warteschlange.
Maximale Nachrichtenbatchgröße messageBatchSize_<workflow-name> Der vordefinierte umgebungsübergreifende Parameter, der die größte Anzahl von Nachrichten in einem Batch angibt. Führen Sie die folgenden Schritte aus, um diesen Wert festzulegen:

1. Wählen Sie im Feld " Maximale Nachrichtenbatchgröße " aus, und wählen Sie dann das Blitzsymbol aus, um die dynamische Inhaltsliste zu öffnen.
2. Wählen Sie in der Liste die Option messageBatchSize_<workflow-name>aus.

Weitere Informationen finden Sie unter "Wenn Nachrichten in einer Warteschlange verfügbar sind (Vorschausperre)".

"Prozess abgeschlossen-Flag initialisieren"

Diese Initialize-Variable-Aktion namens InitializeProcess Complete Flag erstellt eine Variable mit den folgenden Anfangswerten:

Parameter Wert BESCHREIBUNG
Name processCompleted Der Name für die Variable.
Typ Boolean Der Datentyp für die Variable.
Wert FALSCH Der Standardwert für die Variable.

Der Wert der Variablen processCompleted ändert sich zu true zu einem späteren Zeitpunkt während der Workflow-Ausführung, wenn die folgenden Bedingungen zutreffen:

  • Für die Verarbeitung sind in der Sitzung keine weiteren Nachrichten vorhanden.
  • Die Sitzungssperre muss nicht mehr erneuert werden, damit die aktuelle Workflowinstanz die Ausführung beenden kann.
Bereichsaktion

Die äußere übergeordnete Scope-Aktion enthält eine innere geschachtelte Scope-Aktion namens Geschäftslogik Scope. Dieser geschachtelte Bereich enthält eine Platzhalteraktion namens "Geschäftslogik". Hier können Sie die Aktionen für die Geschäftslogik Ihres Szenarios hinzufügen, um die aktuelle Nachricht zu verarbeiten.

  1. Benennen Sie aus Gründen der Übersichtlichkeit die äußere übergeordnete Bereichsaktion in Process message.

    Screenshot zeigt, dass der übergeordnete Bereich in

  2. Erweitern Sie die innere geschachtelte Aktion namens Geschäftslogikbereich.

    Wenn ein Problem in diesem Bereich auftritt, verwenden Sie die nachfolgenden Aktionen außerhalb der übergeordneten Bereichsaktion , um dieses Problem zu behandeln.

  3. Ersetzen Sie die Platzhalteraktion für die Geschäftslogik durch die tatsächlichen Aktionen für die Geschäftslogik Ihres Szenarios.

Unter der Geschäftslogikbereichsaktion ist die Aktion "Prozess abgeschlossen " so eingerichtet, dass sie immer ausgeführt wird, unabhängig vom Status, der der Geschäftslogikbereich-Aktion zugewiesen ist, nachdem alle Aktionen in der Geschäftslogikbereichsaktion ausgeführt wurden. Damit die Aktion "Prozess abgeschlossen " immer ausgeführt werden kann, legt der Workflow die Ausführung nach der Einstellung auf die folgenden Werte vor:

  • Ist erfolgreich
  • Ist abgelaufen
  • Wird übersprungen
  • Fehler

Der Screenshot zeigt die Ausführung nach den Einstellungen für die Aktion

Die Aktion "Prozess abgeschlossen " ändert den processCompleted Variablenwert von "false " in "true", was angibt, dass die Nachrichtenverarbeitung abgeschlossen ist.

Screenshot der aktualisierten Werte in der Aktion

Until

Auf der Ebene "Geschäftslogikbereich" führt eine parallele Verzweigung eine Until-Schleife aus, die bestimmt, ob andere Nachrichten in derselben Sitzung vorhanden sind. Aktionen werden innerhalb der Schleife ausgeführt, bis die Schleifenbedingung erfüllt ist oder der Timeoutzeitraum verstrichen ist. In diesem Beispiel wird die Schleife weiter ausgeführt, bis die Nachrichtenverarbeitung abgeschlossen ist, wie durch die folgende Bedingung ausgedrückt:

processCompleted = true

Screenshot der parallelen Verzweigung mit der Until-Schleife.

Sperre einer Nachricht in einer Warteschlange verlängern

In der Until-Schleife steuert die Aktion im "Service Bus" mit dem Namen "Sperre einer Nachricht in einer Warteschlange erneuern" die Zeitspanne, in der der Workflow eine Nachricht verarbeiten kann, bevor die Nachricht erneut zum Verarbeiten bereitsteht. Dieses Verhalten verhindert eine vorzeitige Veröffentlichung aufgrund lang ausgeführter Aufgaben und stellt sicher, dass nur ein Client die Nachricht gleichzeitig verarbeitet, bevor die Sperrdauer auf den Anfangswert festgelegt wird. Weitere Informationen finden Sie unter Verlängern von Sperren.

In der folgenden Tabelle werden die vorgefüllten Parameter der Aktion beschrieben:

Parameter Wert BESCHREIBUNG
Warteschlangenname queueName_<workflow-name> Der vordefinierte umgebungsübergreifende Parameter, der die Service Bus-Warteschlange angibt. Führen Sie die folgenden Schritte aus, um diesen Wert festzulegen:

1. Wählen Sie innerhalb des Namensfelds "Warteschlange " aus, und wählen Sie dann das Blitzsymbol aus, um die dynamische Inhaltsliste zu öffnen.
2. Wählen Sie in der Liste die Option queueName_<workflow-name>aus.
Sperrtoken Sperrtoken Das Sperrtoken für die Nachricht, die aufgegeben werden soll. Führen Sie die folgenden Schritte aus, um diesen Wert festzulegen:

1. Wählen Sie im Feld "Sperren"-Token aus, und wählen Sie dann das Blitzsymbol aus, um die dynamische Inhaltsliste zu öffnen.
2. Wählen Sie in der Liste unter "Wenn Nachrichten in einer Warteschlange verfügbar sind" aus Lock Token.
Warten, bis der Vorgang abgeschlossen ist

In der "Until "-Schleife fügt die Verzögerungsaktion mit dem Namen " Auf Prozess warten, bis abgeschlossen " eine zusätzliche Verzögerung für die Nachrichtenverarbeitung hinzu. Stellen Sie sicher, dass dieser Verzögerungswert kleiner als die Sperrtimeoutdauer für die Warteschlange ist. Die mindeste Sperrdauer beträgt 30 Sekunden.

In der folgenden Tabelle werden die vorgefüllten Parameter der Aktion beschrieben:

Parameter Wert BESCHREIBUNG
Zählen delayInMinutes_<workflow-name> Der vordefinierte umgebungsübergreifende Parameter, der die Anzahl der Minuten angibt, die gewartet werden sollen, bevor das Nachrichtensperrtoken erneuert wird. Führen Sie die folgenden Schritte aus, um diesen Wert festzulegen:

1. Wählen Sie innerhalb des Namensfelds "Warteschlange " aus, und wählen Sie dann das Blitzsymbol aus, um die dynamische Inhaltsliste zu öffnen.
2. Wählen Sie in der Liste die Option delayInMinutes_<workflow-name>aus.
Einheit Minute Die Zeiteinheit für die Verzögerung.
Aktionen für die Verarbeitung nach der Nachricht

Unter dem Process message Bereich sind zwei parallele Verzweigungen vorhanden, um die Fälle für die nicht erfolgreiche und erfolgreiche Nachrichtenverarbeitung zu behandeln.

  • Verzweigung 1

    Diese Verzweigung enthält eine Compose-Aktion namens Kompensationslogik als Platzhalter für die Aktionen, die Sie für die Behandlung von Fehlern und Ausnahmen ausführen möchten.

    1. Ersetzen Sie diesen Platzhalter durch die gewünschten Aktionen.

      Sie können beispielsweise eine Bereichsaktion einrichten, die Ihre Fehlerbehandlungsaktionen enthält.

    2. Stellen Sie sicher, dass die Fehlerbehandlungsaktion direkt unter dem Process message Bereich nur ausgeführt wird, nachdem der Process message Bereich mit einem der folgenden Status abgeschlossen ist:

      • Ist abgelaufen
      • Wird übersprungen
      • Fehler

      Beispiel:

      Screenshot zeigt den Bereich für die Fehlerbehandlung und wird nach den Einstellungen ausgeführt.

    Unter den Fehlerbehandlungsaktionen entsperrt die Dienstbus-Aktion " Nachricht in einer Warteschlange abbrechen " eine Nachricht und fordert die Nachricht erneut für einen anderen Versuch auf.

    In der folgenden Tabelle werden die vorgefüllten Werte der Aktion beschrieben:

    Parameter Wert BESCHREIBUNG
    Warteschlangenname queueName_<workflow-name> Der vordefinierte umgebungsübergreifende Parameter, der die Service-Bus-Warteschlange angibt. Führen Sie die folgenden Schritte aus, um diesen Wert festzulegen:

    1. Wählen Sie innerhalb des Namensfelds "Warteschlange " aus, und wählen Sie dann das Blitzsymbol aus, um die dynamische Inhaltsliste zu öffnen.
    2. Wählen Sie in der Liste die Option queueName_<workflow-name>aus.
    Sperrtoken Sperrtoken Das Sperrtoken für die Nachricht, die abgebrochen werden soll. Führen Sie die folgenden Schritte aus, um diesen Wert festzulegen:

    1. Wählen Sie im Feld "Sperren"-Token aus, und wählen Sie dann das Blitzsymbol aus, um die dynamische Inhaltsliste zu öffnen.
    2. Wählen Sie in der Liste unter "Wenn Nachrichten in einer Warteschlange verfügbar sind" aus Lock Token.

    Beispiel:

    Screenshot zeigt die Aktion

  • Verzweigung 2

    Diese Verzweigung enthält eine ServiceBus-Aktion namens "Nachricht abschließen" in einer Warteschlange , die die Nachricht als erledigt markiert und die Nachricht aus der Warteschlange löscht. Dieses Verhalten verhindert die erneute Zustellung und verschiebt die Nachricht in den Status "verarbeitet". Diese Aktion wird nur ausgeführt, wenn der Process message Bereich erfolgreich abgeschlossen wurde.

    In der folgenden Tabelle werden die vorgefüllten Werte der Aktion beschrieben:

    Parameter Wert BESCHREIBUNG
    Warteschlangenname queueName_<workflow-name> Der vordefinierte umgebungsübergreifende Parameter, der Ihre ServiceBus-Warteschlange angibt. Führen Sie die folgenden Schritte aus, um diesen Wert festzulegen:

    1. Wählen Sie innerhalb des Namensfelds "Warteschlange " aus, und wählen Sie dann das Blitzsymbol aus, um die dynamische Inhaltsliste zu öffnen.
    2. Wählen Sie in der Liste die Option queueName_<workflow-name>aus.
    Sperrtoken Sperrtoken Das Sperrtoken für die Nachricht, die verworfen werden soll. Führen Sie die folgenden Schritte aus, um diesen Wert festzulegen:

    1. Wählen Sie im Feld "Sperren"-Token aus, und wählen Sie dann das Blitzsymbol aus, um die dynamische Inhaltsliste zu öffnen.
    2. Wählen Sie in der Liste unter "Wenn Nachrichten in einer Warteschlange verfügbar sind" aus Lock Token.

    Beispiel:

    Der Screenshot zeigt die Aktion

Ausführen des Workflows

  1. Speichern Sie den Workflow. Wählen Sie auf der Symbolleiste des Designers Speichern aus.

  2. Um Ihren Workflow zu testen, senden Sie Nachrichten an Ihre ServiceBus-Warteschlange.

  3. Vergewissern Sie sich, dass sich der Workflow erwartungsgemäß verhält.