Nachrichten an viele Verbrauchergruppen in einer Warteschlange weiterleiten

Fan-out-Nachrichten von einer einzelnen OCI-Queue an viele Nutzungsgruppen und Anwendung von Filtern für jede Gruppe, wodurch skalierbares, Pull-basiertes Application-to-Application-Messaging mit geringer Latenz ermöglicht wird

Mit fanout können Sie eine Nachricht gleichzeitig an verschiedene Verbrauchergruppen senden. So können Sie Updates ganz einfach mit vielen Teams oder Services aus nur einer Warteschlange teilen. Dies ist nützlich, da Sie genau steuern können, wer welche Nachrichten erhält, so dass jede Gruppe nur sieht, was für sie relevant ist.

Um Fanout zu verwenden, erstellen Sie Filter, mit denen die Nachrichtenattribute ausgewertet werden, die an jede Nachricht angehängt sind. Nur die Nutzungsgruppen, für die der Filter true auswertet, erhalten die Nachricht.

Consumer-Gruppen

Eine Consumer-Gruppe ist ein persistenter, logischer Übermittlungspfad innerhalb einer Queue. Jede Nutzungsgruppe empfängt Nachrichten separat basierend auf den von Ihnen festgelegten Filtern.
Hinweis

Sie müssen Nutzungsgruppen aktivieren, bevor Sie sie in einer Queue verwenden können. Dies ist möglich, wenn Sie eine Warteschlange erstellen oder bearbeiten.
Wenn Sie Nutzungsgruppen für eine Queue aktivieren, erstellt der Queue-Service automatisch eine Standardgruppe, die als primäre Nutzungsgruppe bezeichnet wird. Sie können der Standardgruppe zwar keine Filter hinzufügen oder sie löschen, sie können sie jedoch bei Bedarf deaktivieren. Sie können sich diese Gruppe als Obermenge vorstellen: Solange sie aktiviert ist, erhält sie alle Nachrichten, die in der Queue veröffentlicht wurden, unabhängig von Filtern, die für andere Gruppen festgelegt wurden.
Hinweis

Die primäre Gruppe stellt sicher, dass jede Nachricht ein Ziel hat. Wenn Sie die primäre Nutzungsgruppe auf "Inaktiv" setzen, erhalten Sie keine Nachrichten über sie. Das System löscht alle Nachrichten, die gesendet werden, während die primäre Gruppe inaktiv ist und die nicht mit Filtern in anderen Gruppen übereinstimmen. Diese Nachrichten können nicht wiederhergestellt werden. Um zu vermeiden, dass Nachrichten verloren gehen, lassen Sie die primäre Nutzungsgruppe aktiviert, es sei denn, Sie beabsichtigen, bestimmte Nachrichten zu verwerfen.

Zusätzlich zur Standard-Nutzungsgruppe können Sie so viele Nutzungsgruppen hinzufügen, wie Sie benötigen, um Nachrichten an bestimmte Consumer zu senden. Jede Gruppe arbeitet unabhängig von den anderen, so dass Nachrichten getrennt zugestellt, gefiltert und verfolgt werden, um Isolation und Fairness unter den Verbrauchern zu gewährleisten. Sie können für jede Gruppe einen Filter festlegen, um zu steuern, welche Nachrichten sie empfängt. Wenn Sie keinen Filter festlegen oder den Filter leer lassen, erhält die Gruppe alle Nachrichten, wie bei der Standardgruppe.

Im Folgenden werden die Unterschiede zwischen der Standardnutzungsgruppe (primär) und den von Ihnen erstellten Nutzungsgruppen aufgeführt:

Feature Standard-Nutzungsgruppe (primär) Sonstige Verbrauchergruppen
Wie erstellt Wird automatisch erstellt, wenn Nutzungsgruppen aktiviert sind Manuell nach Bedarf erstellt
Kann gelöscht werden Nein Ja
Kann deaktiviert sein Ja Ja
Filter möglich Nein Ja
Empfängt alle Nachrichten Ja, falls aktiviert Nur Nachrichten, die mit dem Filter übereinstimmen, oder alle Nachrichten, wenn kein Filter festgelegt ist
DLQ-Zustellungsanzahl kann festgelegt werden Nein Ja
OCID Identisch mit Queue-OCID Eindeutige OCID pro Gruppe

Verwendungsbeispiel

Angenommen, Sie erstellen eine Warteschlange für Fakturierungsereignisse. Die Standardnutzungsgruppe ist für das Fakturierungscomplianceteam, das aus Compliancegründen alle Nachrichten empfangen muss. Sie fügen auch eine weitere Nutzungsgruppe für das Team hinzu, das Spesen für Führungskräfte verarbeitet, und legen einen Filter fest, sodass diese Gruppe nur Nachrichten mit dem Attribut team = "exec-expenses" empfängt. Dadurch wird der Lärm für das Spesenteam der Geschäftsleitung reduziert, indem sichergestellt wird, dass sie nur relevante Nachrichten erhalten.

Nachrichten und Attribute

Eine Nachricht kann optional Attribute, Schlüssel/Wert-Paare, die vom Producer als zusätzliche Informationen (Metadaten) hinzugefügt wurden, enthalten. Attribute können beliebige Details zur Nachricht (z.B. Region, Priorität oder Ereignistyp) beschreiben und Sie bei der fein granulierten Filterung und Zielgruppenselektion von Nachrichten an Nutzungsgruppen unterstützen.

Nachfolgend finden Sie einige Richtlinien für Producer beim Erstellen von Attributen:

  • Bei Attributschlüsseln und -werten muss die Groß-/Kleinschreibung beachtet werden.
  • Attributwerte müssen einen der folgenden unterstützten Datentypen aufweisen:
    • Zeichenfolge: Eine UTF-8-codierte Zeichenfolge.
    • Zahl: Eine Ganzzahl oder ein numerischer Dezimalwert.
  • Attribute werden auf die gesamte Nachrichtengröße angerechnet.
Im Folgenden finden Sie einige Tipps zum Benennen von Attributschlüsseln:
  • Attributschlüssel müssen mit einem Buchstaben oder Unterstrich (_) beginnen.
  • Attributschlüssel können nur Buchstaben, Zahlen, Bindestriche (-) oder Unterstriche (_) enthalten.
  • Verwenden Sie keine Anführungszeichen um Tasten herum.

Filtern

Mit Filtern steuern Sie, welche Nachrichten eine Nutzungsgruppe empfängt. Wenn eine Nachricht veröffentlicht wird, prüft Queue Service den Filter anhand der Attribute jeder Nachricht, um zu entscheiden, ob die Nachricht an diese Nutzungsgruppe zugestellt werden soll. Eine Nachricht wird nur dann an eine Nutzungsgruppe gesendet, wenn ihr Filter mit den Attributen übereinstimmt
Hinweis

Filter funktionieren nur mit Nachrichtenattributen, nicht mit dem Nachrichtentext.

Sie erstellen Filter, wenn Sie eine Nutzungsgruppe erstellen. Jede Nutzungsgruppe kann über einen eigenen Filter verfügen, und Sie können einen Filter pro Nutzungsgruppe erstellen.

Ein Filterausdruck ist eine SQL-ähnliche Regel, die Sie schreiben, um zu entscheiden, welche Nachrichten eine Gruppe erhält.

Ausdrucks-Constraints filtern

Hier sind die Regeln, die definieren, wie Sie Filterausdrücke schreiben und verwenden, sodass die Filter so funktionieren, wie sie es möchten:
  • Bei Filterausdrücken wird die Groß-/Kleinschreibung beachtet. Beispiel: :region = "us-ashburn-1" unterscheidet sich von :region = "US-ASHBURN-1".
  • Filterausdrücke können bis zu 256 Zeichen lang sein.

Bewertung filtern

Folgendes geschieht, wenn OCI Queue Service Filter prüft und was mit Nachrichten geschieht, die keinen Filtern entsprechen:
  • Queue Service prüft Filter nur, wenn eine Nachricht zum ersten Mal in der Queue veröffentlicht wird.
  • Queue Service prüft Filter nur, wenn eine Nachricht zum ersten Mal in der Queue veröffentlicht wird. Wenn Sie eine Nutzungsgruppe später erneut aktivieren oder ihren Filter ändern, werden vorhandene Nachrichten in der Queue nicht rückwirkend ausgewertet. Es werden nur neue Nachrichten mit dem aktualisierten Filter geprüft.
  • Wenn der Filter keiner Nutzungsgruppe mit einer Nachricht übereinstimmt und die primäre Gruppe deaktiviert ist, wird die Nachricht gelöscht und kann nicht abgerufen werden. Die Queue gibt eine Metrik aus, wenn eine Nachricht gelöscht wird. Sie können diese Metrik in der Konsole in Queue-Service oder in OCI Monitoring anzeigen.

Modell für Filterausdrücke

Sie können folgende Filterausdrücke verwenden:

Schlüsselpräsenz

Verwenden Sie Schlüsselpräsenzfilter, um zu prüfen, ob eine Nachricht ein bestimmtes Attribut enthält oder fehlt.

Beispiele für Filterausdrücke:

  • :region: Stimmt mit Nachrichten überein, für die das Attribut region festgelegt ist, unabhängig vom Wert.
  • NOT :region: Stimmt mit Nachrichten überein, die nicht das Attribut region aufweisen.

Zeichenfolgenfilter

Verwenden Sie Zeichenfolgenfilter, um Nachrichten basierend auf dem Wert eines Textattributs abzugleichen. Sie können nach genauen Übereinstimmungen, Unterschieden oder Mustern im Text suchen.

Beispiele für Filterausdrücke:

  • :name = "Bob": Stimmt mit Nachrichten überein, bei denen das Attribut name genau "Bob" ist.
  • :name != "Bob": Stimmt mit Nachrichten überein, bei denen das Attribut name nicht "Bob" lautet.
  • hasPrefix(:name, "Bo"): Stimmt mit Nachrichten überein, bei denen das Attribut name mit "Bo" beginnt.
  • hasSuffix(:name, "ob"): Stimmt mit Nachrichten überein, bei denen das Attribut name mit "ob" endet.
  • NOT hasPrefix(:name, "Bo"): Stimmt mit Nachrichten überein, bei denen das Attribut name nicht mit "Bo" beginnt.

Zahlenfilter

Verwenden Sie Zahlenfilter, um Nachrichten basierend auf dem Wert eines numerischen Attributs abzugleichen.

Hier finden Sie einige Beispiele:

  • :age = 40: Stimmt mit Nachrichten überein, bei denen das Attribut age genau 40 ist.
  • :age != 40: Gleicht Nachrichten ab, bei denen das Attribut age nicht 40 ist.
  • :age > 40: Gleicht Nachrichten ab, bei denen das Attribut age größer als 40 ist.
  • :age >= 40: Stimmt mit Nachrichten überein, bei denen das Attribut age größer/gleich 40 ist.
  • :age < 40: Stimmt mit Nachrichten überein, bei denen das Attribut age kleiner als 40 ist.
  • :age <= 40: Stimmt mit Nachrichten überein, bei denen das Attribut age kleiner oder gleich 40 ist.

Logische Filter

Verwenden Sie logische Operatoren, um Regeln zu kombinieren und flexiblere Filter zu erstellen. Unterstützte Operatoren sind UND, ODER und NOT.
Hinweis

Operatorpriorität: Die Klammern ( ) haben die höchste Priorität, gefolgt von NOT, AND, OR.

Hier finden Sie einige Beispiele:

  • :name = "Bob" AND :age = 40: Stimmt mit Nachrichten überein, bei denen das Attribut name "Bob" und age 40 ist.
  • :name = "Bob" OR :age = 40: Stimmt mit Nachrichten überein, bei denen das Attribut name "Bob" oder age 40 ist.
  • :name = "Bob" AND NOT :age: Stimmt mit Nachrichten überein, bei denen das Attribut name "Bob" lautet und kein Attribut age vorhanden ist.

Komplexe Filter

Verwenden Sie komplexere Logik, indem Sie mehrere Filter mit Klammern und mehreren logischen Operatoren kombinieren.
Hinweis

Operatorpriorität: Die Klammern ( ) haben die höchste Priorität, gefolgt von NOT, AND, OR.

Es folgt ein einfaches Beispiel:

  • :name = "Bob" AND NOT (:age > 40 OR :location = "Chicago"): Stimmt mit Nachrichten überein, bei denen das Attribut name "Bob" lautet und age nicht größer als 40 ist oder location nicht "Chicago" ist.

IAM-Policys

Lesen Sie die IAM-Policys, die für die Arbeit mit Fanout- und Nutzungsgruppen erforderlich sind.

Bewährte Methoden

  • Beginnen Sie mit kleinen Filtern, um zu prüfen, ob die Nachrichtenzustellung wie erwartet funktioniert. Fügen Sie komplexe Filterlogik langsam hinzu und testen Sie sie.
  • Überwachen Sie die Metrik für gelöschte Nachrichten in OCI Monitoring. So können Sie Nachrichten abfangen, die gelöscht wurden, weil kein Filter abgeglichen wurde.
  • Verwenden Sie eine konsistente Benennung für Nachrichtenattribute aller Producer. Dies macht das Schreiben und Verwalten von Filtern einfacher und zuverlässiger.
  • Wenn ein Attributschlüssel nicht den Regeln entspricht [beginnend mit einem Buchstaben oder einem Unterstrich (_), nur Buchstaben, Zahlen, Bindestriche (-) oder Unterstriche (_)], fügen Sie im Filterausdruck Anführungszeichen um ihn herum hinzu.