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, mit dem Nachrichten ausgewertet und gefiltert werden. Sie können Ihre Ereignisdaten auch transformieren, indem Sie Transformationsausdrücke mit CEL schreiben.
Im Allgemeinen besteht ein Bedingungsausdruck aus einer oder mehreren Anweisungen, die mithilfe von logischen 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"
zu True
ausgewertet.
Hier finden Sie weitere Informationen:
- Registrierung zum Empfang von Ereignissen erstellen
- Empfangene Ereignisse transformieren
- CEL-Sprachdefinition
Verfügbare Attribute
Auf alle Ereigniskontextattribute kann über ein vordefiniertes message
-Objekt als Variable zugegriffen werden. Diese Variablen werden zur Laufzeit anhand von Ereigniskontextattributen mit Werten gefüllt. Bei einer Registrierung kann ein bestimmtes Attribut durch eine Variable ausgedrückt werden. message.type
gibt beispielsweise den Wert des Attributs type
zurück.
Wichtige Hinweise:
Ereignisse können beliebig viele zusätzliche benutzerdefinierte CloudEvents-Attribute mit unterschiedlichen Namen enthalten und für Registrierungen verwendet werden (auch Erweiterungsattribute genannt). Sie werden jedoch in CEL-Ausdrücken unabhängig von ihrem tatsächlichen Format als
String
-Typen dargestellt. Mit einem CEL-Ausdruck können Sie die Werte in andere Typen umwandeln.Sie können Anmeldungen 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 bei der Transformation von Ereignisdaten unterstützt. So können Sie den Inhalt der Ereignisnutzlast ändern, um beispielsweise den API-Vertrag für ein bestimmtes Ziel zu erfüllen.
Bei der Auswertung von Bedingungsausdrücken für eine Registrierung können die folgenden Attribute abgerufen werden:
Attribut | Attributtyp | Beschreibung |
---|---|---|
message.datacontenttype |
String |
Der Inhaltstyp des data -Werts |
message.dataschema |
URI |
Gibt das Schema an, an das data entspricht |
message.id |
String |
Identifiziert das Ereignis. Feedersteller müssen dafür sorgen, dass source + id für jedes einzelne Ereignis 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 Thema des Ereignisses im Kontext des Ereigniserstellers (source ) |
message.time |
Timestamp |
Zeitstempel des Auftretens des Ereignisses. Kann vom CloudEvents-Produzenten auf eine andere Zeit (z. B. die aktuelle Zeit) festgelegt werden. Alle Produzenten für dieselbe source müssen jedoch konsistent sein. |
message.type |
String |
Beschreibt die Art des Ereignisses im Zusammenhang mit dem ursprünglichen Ereignis. |
Operatoren und Funktionen
Mit Operatoren und Funktionen können Sie komplexe logische Ausdrücke erstellen.
Mit logischen Operatoren wie &&
, ||,
und !
können Sie mehrere Variablen in einem Bedingungsausdruck 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
ergibt.
Mit Stringmanipulationsoperatoren wie x.contains('y')
können Sie Strings oder Teilstrings abgleichen, die Sie definieren. So können Sie Regeln für den Abgleich von Nachrichten entwickeln, ohne jede mögliche Kombination auflisten zu 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 können.
Weitere Informationen finden Sie in den Listen der vordefinierten CEL-Operatoren und -Funktionen und 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 Stringliteralargument 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 Programmtext. |
x == y |
Gibt True zurück, wenn x gleich y ist. |
x != y |
Gibt True zurück, wenn x nicht gleich y ist. |
x && y |
Gibt True zurück, wenn sowohl x als auch y 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, gibt das Attribut den Wert bei Schlüssel k in der String-zu-String-Zuordnung m zurück. Wenn der Schlüssel k nicht vorhanden ist, wird ein Fehler zurückgegeben, der dazu führt, dass die zu prüfende Regel nicht übereinstimmt. |
Operatoren zur Stringmanipulation
In der folgenden Tabelle werden die Stringmanipulationsoperatoren beschrieben, die von Eventarc Advanced unterstützt werden.
Ausdruck | Beschreibung |
---|---|
double(x) |
Wandelt das Stringergebnis von x in einen double -Typ um. Mit dem konvertierten String können Gleitkommazahlen mit standardmäßigen arithmetischen Operatoren wie > und <= verglichen werden. Dies funktioniert nur für Werte, die als Gleitkommazahlen dargestellt werden können. |
int(x) |
Wandelt das Stringergebnis von x in einen int -Typ um. Der konvertierte String kann zum Vergleichen von Ganzzahlen mit standardmäßigen arithmetischen Operatoren wie > und <= verwendet werden. Dies funktioniert nur bei Werten, die ganze Zahlen 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 sind. Es kann ein optionales Trennzeichen zwischen den Elementen im resultierenden String verwendet werden. Der folgende Ausdruck gibt beispielsweise 'hello world' zurück:
|
x.lowerAscii() |
Gibt einen neuen String zurück, in dem alle ASCII-Zeichen in Kleinbuchstaben geschrieben 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. Nimmt ein optionales Argument an, mit dem die Anzahl der Ersetzungen begrenzt wird. Der folgende Ausdruck gibt beispielsweise 'wello hello' zurück:
|
x.split(y) |
Gibt eine Liste von Strings zurück, die durch das Trennzeichen y von der Eingabe getrennt wurden. Nimmt ein optionales Argument an, mit dem die Anzahl der zu generierenden Teilstrings begrenzt wird. 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 geschrieben 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 und eine Zuordnung von Schlüssel- und Wertpaaren zurückgegeben. Der folgende Ausdruck gibt beispielsweise {"1": "user", "Username": "testuser", "Domain": "testdomain"} zurück:
|
re.extract(target,regex,rewrite) |
Mit regex werden übereinstimmende Gruppenwerte aus dem String target extrahiert und 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. Das R
vor den regulären Ausdrücken gibt einen Rohstring an, der nicht mit einem Escapezeichen maskiert werden muss.
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.