跳至内容

使用触发器

触发器代表着对来自特定代理的事件的订阅愿望。

subscriber 值必须是 目标

示例触发器

以下触发器接收来自 default 代理的所有事件,并将它们传递给 Knative Serving 服务 my-service

  1. 使用以下示例创建一个 YAML 文件

    apiVersion: eventing.knative.dev/v1
    kind: Trigger
    metadata:
      name: my-service-trigger
    spec:
      broker: default
      subscriber:
        ref:
          apiVersion: serving.knative.dev/v1
          kind: Service
          name: my-service
    
  2. 通过运行以下命令应用 YAML 文件

    kubectl apply -f <filename>.yaml
    
    其中 <filename> 是您在上一步中创建的文件的名称。

以下触发器接收来自 default 代理的所有事件,并将它们传递给 Kubernetes 服务 my-service 的自定义路径 /my-custom-path

  1. 使用以下示例创建一个 YAML 文件

    apiVersion: eventing.knative.dev/v1
    kind: Trigger
    metadata:
      name: my-service-trigger
    spec:
      broker: default
      subscriber:
        ref:
          apiVersion: v1
          kind: Service
          name: my-service
        uri: /my-custom-path
    
  2. 通过运行以下命令应用 YAML 文件

    kubectl apply -f <filename>.yaml
    
    其中 <filename> 是您在上一步中创建的文件的名称。

触发器过滤

支持基于任意数量的 CloudEvents 属性和扩展的各种形式的过滤。如果提供了多个 filters,则所有 filters 都必须评估为 true,事件才能传递给触发器的订阅者。请注意,我们不支持对 CloudEvents 的 data 字段进行过滤。

重要

本节中描述的过滤器目前仅在 Apache Kafka Broker 和 MTChannelBasedBroker 中受支持。对于其他代理,请参考 传统属性过滤器

示例

此示例过滤来自 default 代理的类型为 dev.knative.foo.bar 且扩展名为 myextension 且以 `-extensions 结尾的事件。

  1. 使用以下示例创建一个 YAML 文件

    apiVersion: eventing.knative.dev/v1
    kind: Trigger
    metadata:
      name: my-service-trigger
    spec:
      broker: default
      filters:
        exact:
          type: dev.knative.foo.bar
        suffix:
          myextension: -value
      subscriber:
        ref:
          apiVersion: serving.knative.dev/v1
          kind: Service
          name: my-service
    
  2. 通过运行以下命令应用 YAML 文件

    kubectl apply -f <filename>.yaml
    
    其中 <filename> 是您在上一步中创建的文件的名称。

支持的过滤器方言

exact

CloudEvent 属性字符串值必须与指定的字符串值完全匹配。匹配区分大小写。如果属性不是字符串,则过滤器将比较属性的字符串表示形式与指定的字符串值。

apiVersion: eventing.knative.dev/v1
kind: Trigger
metadata:
  ...
spec:
  ...
  filters:
    - exact:
        type: com.github.push

prefix

CloudEvent 属性字符串值必须以指定的字符串值开头。匹配区分大小写。如果属性不是字符串,则过滤器将比较属性的字符串表示形式与指定的字符串值。

apiVersion: eventing.knative.dev/v1
kind: Trigger
metadata:
  ...
spec:
  ...
  filters:
    - prefix:
        type: com.github.

suffix

CloudEvent 属性字符串值必须以指定的字符串值结尾。匹配区分大小写。如果属性不是字符串,则过滤器将比较属性的字符串表示形式与指定的字符串值。

apiVersion: eventing.knative.dev/v1
kind: Trigger
metadata:
  ...
spec:
  ...
  filters:
    - suffix:
        type: .created

all

所有嵌套的过滤器表达式必须评估为 true。

apiVersion: eventing.knative.dev/v1
kind: Trigger
metadata:
  ...
spec:
  ...
  filters:
    - all:
        - exact:
            type: com.github.push
        - exact:
            subject: https://github.com/cloudevents/spec

any

至少一个嵌套的过滤器表达式必须评估为 true。

apiVersion: eventing.knative.dev/v1
kind: Trigger
metadata:
  ...
spec:
  ...
  filters:
    - any:
        - exact:
            type: com.github.push
        - exact:
            subject: https://github.com/cloudevents/spec

not

评估的嵌套表达式必须评估为 false。

apiVersion: eventing.knative.dev/v1
kind: Trigger
metadata:
  ...
spec:
  ...
  filters:
      - not:
          exact:
              type: com.github.push

cesql

提供的 CloudEvents SQL 表达式 必须评估为 true。

重要

Knative 1.15+ 仅支持 CloudEvents SQL v1.0 规范。在 Knative v1.15 之前编写的任何 CESQL 表达式都应进行验证,因为 CESQL 规范存在一些更改。

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

传统属性过滤器

传统属性过滤器对任意数量的 CloudEvents 属性以及扩展提供精确匹配过滤。它的语义和行为与 exact 过滤器方言相同,用户应尽可能迁移到 exact 过滤器。但是,为了向后兼容性,属性过滤器将继续对所有用户起作用。以下示例过滤来自 default 代理的类型为 dev.knative.foo.bar 且扩展名为 myextension 且值为 my-extension-value 的事件。

apiVersion: eventing.knative.dev/v1
kind: Trigger
metadata:
  name: my-service-trigger
spec:
  broker: default
  filter:
    attributes:
      type: dev.knative.foo.bar
      myextension: my-extension-value
  subscriber:
    ref:
      apiVersion: serving.knative.dev/v1
      kind: Service
      name: my-service

当同时提供 filters 字段和 filter 字段时,filters 字段将覆盖 filter 字段。例如,在以下触发器中,类型为 dev.knative.a 的事件将被传递,而类型为 dev.knative.b 的事件将不会被传递。

apiVersion: eventing.knative.dev/v1
kind: Trigger
metadata:
  name: my-service-trigger
spec:
  broker: default
  filters:
    exact:
      type: dev.knative.a
  filter:
    attributes:
      type: dev.knative.b
  subscriber:
    ref:
      apiVersion: serving.knative.dev/v1
      kind: Service
      name: my-service

触发器注释

您可以通过设置以下两个注释来修改触发器的行为

  • eventing.knative.dev/injection:如果设置为 enabled,Eventing 会在触发器不存在时自动为触发器创建一个代理。代理是在创建触发器的命名空间中创建的。此注释仅在您启用了 Sugar Controller 时才有效,该控制器是可选的,默认情况下未启用。
  • knative.dev/dependency:此注释用于标记触发器依赖的源。如果其中一个依赖项未准备好,则触发器将不会准备好。

以下 YAML 是一个带依赖项的触发器的示例

apiVersion: eventing.knative.dev/v1
kind: Trigger
metadata:
  name: my-service-trigger
  annotations:
    knative.dev/dependency: '{"kind":"PingSource","name":"test-ping-source","apiVersion":"sources.knative.dev/v1"}'
spec:
  broker: default
  filter:
    attributes:
      type: dev.knative.foo.bar
      myextension: my-extension-value
    subscriber:
      ref:
        apiVersion: serving.knative.dev/v1
        kind: Service
        name: my-service

我们使用分析和 Cookie 来了解网站流量。有关您使用我们网站的信息将为此目的与 Google 共享。 了解更多。