Szenario: Queue-Nachrichten an eine Funktion senden

Queue mit Funktionen über Connector Hub integrieren

In diesem Szenario wird eine Funktion erstellt und dann diese Funktion als Ziel in einem Connector (Connector Hub) referenziert, um Nachrichten aus Queues zu empfangen und zu verarbeiten.

Queue-Nachrichten werden an eine Funktion gesendet.

Die von der Funktion empfangene Payload enthält nur Nachrichten aus der Queue.

Ein zugehöriges Tutorial finden Sie unter Benutzerfunktionen mit OCI Functions und OCI Queue autorisieren, ohne Genehmigern Admin-Berechtigung bereitzustellen.

Hilfe zur Fehlerbehebung finden Sie unter Fehlerbehebung bei Connectors.

Erforderliche IAM-Policy

Wenn Sie Mitglied der Administratorengruppe sind, besitzen Sie bereits den erforderlichen Zugriff zur Ausführung dieses Szenarios. Andernfalls benötigen Sie Zugriff auf Functions .

Der Workflow zum Erstellen des Connectors umfasst eine Standard-Policy, die bei Bedarf Berechtigungen zum Schreiben in den Zielservice erteilen. Informationen zu Policys finden Sie unter Überblick über IAM-Policys.

Fehlerbehandlung bei der Verarbeitung von Warteschlangen

Hinweis

Im Kontext von Queue-Nachrichten, die an Funktionen gesendet werden, werden teilweise Fehler bei der Verarbeitung von Nachrichten in einem Batch nicht unterstützt.

Wenn eine Funktion, die einen Batch von Nachrichten aus einer Queue verarbeitet, auf einen Fehler stößt, werden alle Nachrichten in diesem Batch wieder in der Queue angezeigt, einschließlich Meldungen, die von der Funktion erfolgreich verarbeitet wurden. Daher könnte eine Nachricht von der Funktion mehrmals verarbeitet werden. Wie bei jedem Ziel wiederholt sich der Connector unbegrenzt, bis das Funktionsziel erfolgreich ist. Weitere Informationen finden Sie unter Auslieferungsdetails.

Wenn bei der Verarbeitung eines Nachrichtenbatches ein Fehler auftritt, wird die Zustellungsanzahl für diese Nachrichten weiterhin erhöht. Wenn die Zustellungsanzahl für eine Nachricht den auf Queueebene definierten Höchstwert erreicht, wird die Nachricht an die Dead-Letter Queue gesendet. Weitere Informationen finden Sie unter Zustellungsanzahl.

Um die erneute Verarbeitung von Nachrichten zu verhindern, machen Sie Ihre Funktion idempotent.

    1. Wählen Sie auf der Listenseite Connectors die Option Connector erstellen aus. Informationen zum Suchen der Listenseite finden Sie unter Connectors auflisten.
    2. Geben Sie auf der Seite Connector erstellen einen benutzerfreundlichen Namen für den neuen Connector und eine optionale Beschreibung ein. Geben Sie dabei keine vertraulichen Informationen ein.
    3. Wählen Sie das Compartment aus, in dem Sie den neuen Connector speichern möchten.
    4. Wählen Sie unter Connector konfigurieren unter Quelle die Option Queue aus.
    5. Wählen Sie unter Ziel die Option Funktionen aus.
    6. Wählen Sie unter Quellverbindung konfigurieren die Queue mit den gewünschten Nachrichten aus:
      • Compartment: Wählen Sie das Compartment mit der gewünschten Queue aus.
      • Queue: Wählen Sie die Queue mit den gewünschten Nachrichten.
        Hinweis

        Um eine Queue für einen Connector auszuwählen, benötigen Sie eine Autorisierung zum Lesen der Queue. Siehe IAM-Policys (Connector Hub sichern).
      • Kanalfilter (unter Nachrichtenfilterung) (optional): Um Nachrichten aus Kanälen in der Queue zu filtern, geben Sie einen Wert ein.

        Beispiel: Um Nachrichten nach Kanal-ID zu filtern, geben Sie die Kanal-ID ein.

        Unterstützte Werte finden Sie unter channelFilter unter GetMessages (Queue-API).

      Hinweis

      Eine Nachricht, die an das Connector-Ziel übertragen wurde, wird als "Verbraucht" betrachtet. Um die Anforderungen des Queue-Service zu erfüllen, löscht der Connector übertragene Nachrichten aus der Quellqueue. Weitere Informationen finden Sie unter Nachrichten konsumieren.
    7. Konfigurieren Sie unter Ziel konfigurieren die Funktion, an die Nachrichten aus der Queue gesendet werden sollen.
      • Compartment: Wählen Sie das Compartment aus, das die gewünschte Funktion enthält.
      • Funktionsanwendung: Wählen Sie den Namen der Funktionsanwendung mit der gewünschten Funktion aus.
      • Funktion: Wählen Sie den Namen der Funktion aus, an die Sie die Daten senden möchten.
      • Weitere Optionen anzeigen: Wählen Sie diesen Link aus, und geben Sie Limits für jeden Batch von Daten an, die an die Funktion gesendet werden. Um manuelle Einstellungen zu verwenden, geben Sie Werte für die Batchgrößenbegrenzung (entweder KB oder Anzahl der Nachrichten) und die Batchzeitbegrenzung (Sekunden) an.

        Begrenzen Sie beispielsweise die Batchgröße, indem Sie entweder 5.000 Kilobyte oder 10 Nachrichten auswählen. Ein Beispiel für ein Batchzeitlimit beträgt 5 Sekunden.

      Hinweise:

      • Der Connector entfernt Quelldaten als JSON-Liste in Batches. Die maximale Batch- oder Payload-Größe beträgt 6 MB.
      • Funktionen werden synchron mit 6 MB Daten pro Aufruf aufgerufen. Wenn Daten größer als 6 MB sind, ruft der Connector die Funktion erneut auf, um die Daten zu verschieben, die den Grenzwert überschreiten. Aufrufe werden nacheinander abgewickelt.
      • Funktionen können bis zu fünf Minuten lang ausgeführt werden. Siehe Zustellungsdetails.
      • Geben Sie keine Daten von Functions-Zielen an Connectors zurück. Connector Hub liest keine Daten, die von Functions-Zielen zurückgegeben werden. Wenn die Funktion ohne Fehler erfolgreich zurückgegeben wird, behandelt der Connector die Nachrichten im Batch als "Verbraucht" und löscht diese Nachrichten aus der Queue.
    8. Standard-Policys akzeptieren: Wählen Sie den Link Erstellen aus, der für jede Standard-Policy bereitgestellt wird.
    9. Klicken Sie auf Erstellen.
    Der Erstellungsprozess beginnt, und sein Fortschritt wird angezeigt. Nach Abschluss wird die Detailseite des Connectors geöffnet.
    1. Definieren Sie die Queuequelle für den Connector: Speichern Sie eine Datei namens source.json.

      Beispielinhalt der JSON-Datei für die Queuequelle:

      {
          "kind": "plugin",
          "pluginName": "QueueSource",
          "configMap": {
              "queueId": "<queue_OCID>"
          }
      }
    2. Definieren Sie das Functions-Ziel für den Connector: Speichern Sie eine Datei namens target.json.

      Beispielinhalt der JSON-Datei für das Functions-Ziel:

      {
          "kind": "functions",
          "functionId": "<function_OCID>",
          "batchSizeInKbs": "5000",
          "batchSizeInNum": "10",
          "batchTimeInSec": "60"
        }
    3. Erstellen Sie den Connector mit dem Befehl oci sch service-connector create.

      Beispielbefehl mit Zeilen, die zur Scannbarkeit hinzugefügt wurden:

      oci sch service-connector create
        --compartment-id <compartment_OCID>
        --display-name "Queues to Functions"
        --source file://source.json
        --target file://target.json
  • Führen Sie den Vorgang CreateServiceConnector aus, um den Connector zu erstellen.

    Beispielanforderung:

    POST /20200909/serviceConnectors
    Host: service-connector-hub.us-phoenix-1.oraclecloud.com
    <authorization and other headers>
    {
      "displayName": "My Queue to Function Connector",
      "compartmentId": "<compartment_OCID>",
      "description": "My connector description",
      "source": {
        "kind": "plugin",
        "pluginName": "QueueSource",
        "configMap": {
          "queueId": "<queue_OCID>"
        }
      },
      "target": {
        "kind": "functions",
        "functionId": "<function_OCID>",
        "batchSizeInKbs": "5000",
        "batchSizeInNum": "10",
        "batchTimeInSec": "60"
      }
    }

Bestätigen, dass der neue Connector Daten verschiebt

Nachdem Sie den Connector erstellt haben, bestätigen Sie, dass Daten verschoben werden.

  • Aktivieren Sie Logs, damit der Connector Details zum Datenfluss abrufen kann.
  • Auf erwartete Ergebnisse im Zielservice prüfen.

Wenn Sie bestätigen, dass Daten verschoben werden, können Sie eine automatische Deaktivierung vermeiden, die auftritt, wenn ein Connector längere Zeit ausfällt.