Common Expression Language (CEL) ist eine Open-Source-Sprache ohne Turing-Vollständigkeit, die zum Auswerten von Ausdrücken verwendet werden kann. Jede Registrierung in Eventarc Advanced enthält einen in CEL geschriebenen Bedingungsausdruck, der zum Auswerten und Filtern von Nachrichten verwendet wird. Sie können auch den Inhalt Ihrer Ereignisdaten transformieren, indem Sie Transformationsausdrücke mit CEL schreiben.
Im Allgemeinen besteht ein Bedingungsausdruck aus einer oder mehreren Anweisungen, die durch logische Operatoren (&&
, ||
oder !
) verbunden sind. Jede Anweisung drückt eine attributbasierte Regel aus, die auf die Daten angewendet wird. Meist werden Operatoren verwendet, um den Wert einer Variablen mit einem Literalwert zu vergleichen.
Wenn der Wert von message.type
beispielsweise google.cloud.dataflow.job.v1beta3.statusChanged
ist, wird der Ausdruck message.type == "google.cloud.dataflow.job.v1beta3.statusChanged"
als True
ausgewertet.
Hier finden Sie weitere Informationen:
- Registrierung erstellen, um Ereignisse zu empfangen
- Empfangene Ereignisse transformieren
- CEL-Sprachdefinition
Verfügbare Attribute
Auf alle Attribute des Ereigniskontexts kann über ein vordefiniertes message
-Objekt als Variablen zugegriffen werden. Diese Variablen werden zur Laufzeit anhand von Attributen des Ereigniskontexts mit Werten gefüllt. Bei einer Registrierung kann eine Variable verwendet werden, um ein bestimmtes Attribut auszudrücken. Mit message.type
wird beispielsweise der Wert des Attributs type
zurückgegeben.
Wichtige Hinweise:
Ereignisse können eine beliebige Anzahl zusätzlicher benutzerdefinierter CloudEvents-Attribute mit eindeutigen Namen (auch als Erweiterungsattribute bezeichnet) enthalten und Registrierungen können diese verwenden. In CEL-Ausdrücken werden sie jedoch unabhängig von ihrem tatsächlichen Format als
String
-Typen dargestellt. Mit einem CEL-Ausdruck können Sie ihre Werte in andere Typen umwandeln.Sie können Registrierungen nicht anhand des Inhalts der Ereignisnutzlast auswerten. Sowohl
message.data
als auchmessage.data_base64
sind reservierte Variablen und können nicht in Ausdrücken verwendet werden. CEL wird jedoch beim Transformieren von Ereignisdaten unterstützt. So können Sie den Inhalt der Ereignisnutzlast ändern, um beispielsweise dem API-Vertrag eines bestimmten Ziels zu entsprechen.
Beim Auswerten von Bedingungsausdrücken für eine Registrierung kann auf die folgenden Attribute zugegriffen werden:
Attribut | Attributtyp | Beschreibung |
---|---|---|
message.datacontenttype |
String |
Der Inhaltstyp des data -Werts |
message.dataschema |
URI |
Gibt das Schema an, das data entspricht. |
message.id |
String |
Gibt das Ereignis an. Feedersteller müssen dafür sorgen, dass source + id für jedes Event eindeutig ist. |
message.source |
URI-reference |
Gibt den Kontext an, in dem ein Ereignis aufgetreten ist |
message.specversion |
String |
Die Version der CloudEvents-Spezifikation, die für das Ereignis verwendet wird. |
message.subject |
String |
Beschreibt das Subjekt des Ereignisses im Kontext des Ereignisproduzenten (identifiziert durch source ). |
message.time |
Timestamp |
Zeitstempel des Ereignisses. Er kann vom CloudEvents-Ersteller auf eine andere Zeit (z. B. die aktuelle Zeit) festgelegt werden. Alle Ersteller für dieselbe source müssen jedoch konsistent sein. |
message.type |
String |
Beschreibt den Ereignistyp, der mit dem ursprünglichen Ereignis zusammenhängt. |
Operatoren und Funktionen
Sie können Operatoren und Funktionen verwenden, um komplexe logische Ausdrücke zu erstellen.
Mit logischen Operatoren wie &&
, ||,
und !
können Sie mehrere Variablen in einem bedingten Ausdruck prüfen. Beispiel: In message.time.getFullYear() < 2020 && message.type == "google.cloud.dataflow.job.v1beta3.statusChanged"
werden zwei Anweisungen verknüpft, die beide True
sein müssen, damit das Gesamtergebnis True
ist.
Mit Operatoren zur Stringbearbeitung wie x.contains('y')
können Sie Strings oder Teilstrings abgleichen, die Sie definieren. So können Sie Regeln entwickeln, mit denen Nachrichten abgeglichen werden, ohne dass Sie jede mögliche Kombination auflisten müssen.
Eventarc Advanced unterstützt auch Erweiterungsfunktionen wie merge
und flatten
, mit denen Daten transformiert und die Änderung von Ereignissen, die von einem Bus empfangen werden, vereinfacht werden kann.
Liste der vordefinierten CEL-Operatoren und -Funktionen und Liste der vordefinierten CEL-Makros
Logische Operatoren
In der folgenden Tabelle werden die logischen Operatoren beschrieben, die von Eventarc Advanced unterstützt werden.
Ausdruck | Beschreibung |
---|---|
x == "my_string" |
Gibt True zurück, wenn x dem konstanten String-Literalargument entspricht. |
x == R"my_string\n" |
Gibt True zurück, wenn x dem angegebenen Raw-String-Literal entspricht, das keine Escape-Sequenzen interpretiert. Raw-String-Literale eignen sich gut für die Darstellung von Strings, die ihrerseits Escape-Sequenzen verwenden müssen, z. B. reguläre Ausdrücke oder Programmcode. |
x == y |
Gibt True zurück, wenn x gleich y ist. |
x != y |
Gibt True zurück, wenn x ungleich y ist. |
x && y |
Gibt True zurück, wenn sowohl x als auch y gleich True sind. |
x || y |
Gibt True zurück, wenn x , y oder beide True sind. |
!x |
Gibt True zurück, wenn der boolesche Wert x False ist, oder False , wenn der boolesche Wert x True ist. |
m['k'] |
Wenn der Schlüssel k vorhanden ist, wird der Wert bei Schlüssel k in der String-zu-String-Zuordnung m zurückgegeben. Wenn der Schlüssel k nicht vorhanden ist, wird ein Fehler zurückgegeben, der dazu führt, dass die auszuwertende Regel nicht übereinstimmt. |
Operatoren zur String-Bearbeitung
In der folgenden Tabelle werden die Operatoren zur Stringbearbeitung beschrieben, die von Eventarc Advanced unterstützt werden.
Ausdruck | Beschreibung |
---|---|
double(x) |
Wandelt das Stringergebnis von x in einen double -Typ um. Der konvertierte String kann verwendet werden, um Gleitkommazahlen mit standardmäßigen arithmetischen Operatoren wie > und <= zu vergleichen. Das funktioniert nur für Werte, die Gleitkommazahlen sein können. |
int(x) |
Wandelt das Stringergebnis von x in einen int -Typ um. Der konvertierte String kann verwendet werden, um Ganzzahlen mit standardmäßigen arithmetischen Operatoren wie > und <= zu vergleichen. Dies funktioniert nur bei Werten, die Ganzzahlen sein können. |
x + y |
Gibt den verketteten String xy zurück. |
x.contains(y) |
Gibt True zurück, wenn der String x den Teilstring y enthält. |
x.endsWith(y) |
Gibt True zurück, wenn der String x mit dem Teilstring y endet. |
x.join() |
Gibt einen neuen String zurück, in dem die Elemente einer Stringliste verkettet werden. Akzeptiert ein optionales Trennzeichen, das zwischen den Elementen im resultierenden String platziert wird. Der folgende Ausdruck gibt beispielsweise 'hello world' zurück:
|
x.lowerAscii() |
Gibt einen neuen String zurück, in dem alle ASCII-Zeichen in Kleinbuchstaben umgewandelt sind. |
x.matches(y) |
Gibt Das RE2-Muster wird mithilfe der Option „RE2::Latin1“ kompiliert, die Unicode-Funktionen deaktiviert. |
x.replace(y,z) |
Gibt einen neuen String zurück, in dem Vorkommen des Teilstrings y durch den Teilstring z ersetzt werden. Akzeptiert ein optionales Argument, das die Anzahl der Ersetzungen begrenzt. Der folgende Ausdruck gibt beispielsweise 'wello hello' zurück:
|
x.split(y) |
Gibt eine Liste von Strings zurück, die durch das Trennzeichen y aus der Eingabe getrennt wurden. Akzeptiert ein optionales Argument, das die Anzahl der zu erstellenden Teilstrings begrenzt. Der folgende Ausdruck gibt beispielsweise ['hello', 'hello hello'] zurück:
|
x.startsWith(y) |
Gibt True zurück, wenn der String x mit dem Teilstring y beginnt. |
x.upperAscii() |
Gibt einen neuen String zurück, in dem alle ASCII-Zeichen in Großbuchstaben umgewandelt sind. |
Funktionen für reguläre Ausdrücke
In der folgenden Tabelle werden die regulären Ausdrucksfunktionen beschrieben, die von Eventarc Advanced unterstützt werden.
Ausdruck | Beschreibung |
---|---|
re.capture(target,regex) |
Mit
|
re.captureN(target,regex) |
Mit regex werden der Gruppenname und der String (für benannte Gruppen) sowie der Gruppenindex und der String (für unbenannte Gruppen) aus dem String target erfasst. Es wird eine Map mit Schlüssel/Wert-Paaren zurückgegeben. Der folgende Ausdruck gibt beispielsweise {"1": "user", "Username": "testuser", "Domain": "testdomain"} zurück:
|
re.extract(target,regex,rewrite) |
Mit regex werden übereinstimmende Gruppierungswerte aus dem String target extrahiert. Es wird ein String mit den extrahierten Werten zurückgegeben, der basierend auf dem Argument rewrite formatiert ist. Der folgende Ausdruck gibt beispielsweise "example.com" zurück:
|
x.matches(regex) |
Gibt Das RE2-Muster wird mithilfe der Option „RE2::Latin1“ kompiliert, die Unicode-Funktionen deaktiviert. |
Die regulären Ausdrücke folgen der RE2-Syntax. Beachten Sie, dass das R
vor den regulären Ausdrücken einen Rohstring angibt, für den keine Escapezeichen erforderlich sind.
Erweiterungsfunktionen
Eventarc Advanced unterstützt bestimmte Erweiterungsfunktionen, mit denen die über einen Bus empfangenen Ereignisdaten transformiert werden können. Weitere Informationen und Beispiele finden Sie unter Empfangene Ereignisse transformieren.