×

高级触发器过滤器为您提供更精确的事件路由的更高级选项。您可以通过精确匹配、前缀或后缀以及 CloudEvent 扩展来筛选事件。这种增强的控制使您可以更轻松地微调事件流,确保只有相关的事件才能触发特定操作。

高级触发器过滤器功能仅为技术预览功能。技术预览功能不受 Red Hat 生产服务级别协议 (SLA) 的支持,并且可能功能不完整。Red Hat 不建议在生产环境中使用它们。这些功能提供对即将推出的产品功能的早期访问,使客户能够在开发过程中测试功能并提供反馈。

有关 Red Hat 技术预览功能的支持范围的更多信息,请参阅 技术预览功能支持范围

高级触发器过滤器概述

高级触发器过滤器功能向触发器添加了一个新的filters字段,该字段与CloudEvents Subscriptions API 中定义的过滤器 API 字段对齐。您可以指定过滤器表达式,其中每个表达式对每个事件求值为truefalse

以下示例显示使用高级过滤器字段的触发器

apiVersion: eventing.knative.dev/v1
kind: Trigger
metadata:
  name: my-service-trigger
spec:
  broker: default
  filters:
    - cesql: "source LIKE '%commerce%' AND type IN ('order.created', 'order.updated', 'order.canceled')"
  subscriber:
    ref:
      apiVersion: serving.knative.dev/v1
      kind: Service
      name: my-service

filters字段包含一个过滤器表达式的数组,每个表达式都求值为truefalse。如果任何表达式求值为false,则事件不会发送到订阅者。每个过滤器表达式都使用特定的方言,该方言确定过滤器的类型以及表达式中允许的附加属性集。

支持的过滤器方言

您可以使用方言定义灵活的过滤器表达式来定位特定事件。

高级触发器过滤器支持以下方言,这些方言提供不同的方法来匹配和过滤事件

  • exact

  • prefix

  • suffix

  • all

  • any

  • not

  • cesql

每个方言都提供基于特定条件过滤事件的不同方法,从而能够精确选择事件进行处理。

exact 过滤器方言

exact方言通过将 CloudEvent 属性的字符串值与指定的字符串进行比较来过滤事件,以精确匹配。比较区分大小写。如果属性不是字符串,则过滤器会在将其与指定值比较之前将其转换为其字符串表示形式。

exact 过滤器方言示例
apiVersion: eventing.knative.dev/v1
kind: Trigger
metadata:
  ...
spec:
  ...
  filters:
    - exact:
        type: com.github.push

prefix 过滤器方言

prefix方言通过比较以指定字符串开头的 CloudEvent 属性的字符串值来过滤事件。此比较区分大小写。如果属性不是字符串,则过滤器会在将其与指定值匹配之前将其转换为其字符串表示形式。

prefix 过滤器方言示例
apiVersion: eventing.knative.dev/v1
kind: Trigger
metadata:
  ...
spec:
  ...
  filters:
    - prefix:
        type: com.github.

suffix 过滤器方言

suffix方言通过比较以指定字符串结尾的 CloudEvent 属性的字符串值来过滤事件。此比较区分大小写。如果属性不是字符串,则过滤器会在将其与指定值匹配之前将其转换为其字符串表示形式。

suffix 过滤器方言示例
apiVersion: eventing.knative.dev/v1
kind: Trigger
metadata:
  ...
spec:
  ...
  filters:
    - suffix:
        type: .created

all 过滤器方言

all 过滤器方言要求所有嵌套的过滤器表达式都计算结果为true才能处理事件。如果任何嵌套表达式返回false,则不会将事件发送给订阅者。

all 过滤器方言示例
apiVersion: eventing.knative.dev/v1
kind: Trigger
metadata:
  ...
spec:
  ...
  filters:
    - all:
        - exact:
            type: com.github.push
        - exact:
            subject: https://github.com/cloudevents/spec

any 过滤器方言

any 过滤器方言要求至少一个嵌套的过滤器表达式计算结果为true。如果所有嵌套表达式都返回false,则不会将事件发送给订阅者。

any 过滤器方言示例
apiVersion: eventing.knative.dev/v1
kind: Trigger
metadata:
  ...
spec:
  ...
  filters:
    - any:
        - exact:
            type: com.github.push
        - exact:
            subject: https://github.com/cloudevents/spec

not 过滤器方言

not 过滤器方言要求嵌套的过滤器表达式计算结果为false才能处理事件。如果嵌套表达式计算结果为true,则不会将事件发送给订阅者。

not 过滤器方言示例
apiVersion: eventing.knative.dev/v1
kind: Trigger
metadata:
  ...
spec:
  ...
  filters:
    - not:
        exact:
          type: com.github.push

cesql 过滤器方言

CloudEvents SQL 表达式 (cesql) 允许计算值并将 CloudEvent 属性与依赖于结构化查询语言 (SQL) WHERE 子句语法的复杂表达式进行匹配。

cesql 过滤器方言使用 CloudEvents SQL 表达式来过滤事件。提供的 CESQL 表达式必须计算结果为true才能处理事件。

cesql 过滤器方言示例
apiVersion: eventing.knative.dev/v1
kind: Trigger
metadata:
  ...
spec:
  ...
  filters:
    - cesql: "source LIKE '%commerce%' AND type IN ('order.created', 'order.updated', 'order.canceled')"

有关cesql 过滤器方言的语法和功能的更多信息,请参阅 CloudEvents SQL 表达式语言

与现有过滤器字段冲突

您可以同时使用filters和现有的filter字段。如果您启用了新的new-trigger-filters功能,并且一个对象同时包含filterfilters,则filters字段将覆盖filter字段。此设置允许您测试新的filters字段,同时保持对现有过滤器的支持。您可以逐步将新字段引入现有触发器对象。

filters字段覆盖filter字段的示例
apiVersion: eventing.knative.dev/v1
kind: Trigger
metadata:
  name: my-service-trigger
spec:
  broker: default
  # Existing filter field. This will be ignored when the new filters field is present.
  filter:
    attributes:
      type: dev.knative.foo.bar
      myextension: my-extension-value
  # New filters field. This takes precedence over the old filter field.
  filters:
    - cesql: "type = 'dev.knative.foo.bar' AND myextension = 'my-extension-value'"
  subscriber:
    ref:
      apiVersion: serving.knative.dev/v1
      kind: Service
      name: my-service