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
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.
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.
- 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
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
- 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
- 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 Attributregionfestgelegt ist, unabhängig vom Wert.NOT :region: Stimmt mit Nachrichten überein, die nicht das Attributregionaufweisen.
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 Attributnamegenau "Bob" ist.:name != "Bob": Stimmt mit Nachrichten überein, bei denen das Attributnamenicht "Bob" lautet.hasPrefix(:name, "Bo"): Stimmt mit Nachrichten überein, bei denen das Attributnamemit "Bo" beginnt.hasSuffix(:name, "ob"): Stimmt mit Nachrichten überein, bei denen das Attributnamemit "ob" endet.NOT hasPrefix(:name, "Bo"): Stimmt mit Nachrichten überein, bei denen das Attributnamenicht 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 Attributagegenau 40 ist.:age != 40: Gleicht Nachrichten ab, bei denen das Attributagenicht 40 ist.:age > 40: Gleicht Nachrichten ab, bei denen das Attributagegrößer als 40 ist.:age >= 40: Stimmt mit Nachrichten überein, bei denen das Attributagegrößer/gleich 40 ist.:age < 40: Stimmt mit Nachrichten überein, bei denen das Attributagekleiner als 40 ist.:age <= 40: Stimmt mit Nachrichten überein, bei denen das Attributagekleiner oder gleich 40 ist.
Logische Filter
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 Attributname"Bob" undage40 ist.:name = "Bob" OR :age = 40: Stimmt mit Nachrichten überein, bei denen das Attributname"Bob" oderage40 ist.:name = "Bob" AND NOT :age: Stimmt mit Nachrichten überein, bei denen das Attributname"Bob" lautet und kein Attributagevorhanden ist.
Komplexe Filter
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 Attributname"Bob" lautet undagenicht größer als 40 ist oderlocationnicht "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.