跳到内容

使用触发器

触发器表示希望订阅来自特定代理(broker)的事件的意愿。

subscriber 的值必须是一个 Destination

触发器示例

以下触发器接收来自 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,则它们都必须评估为 true,事件才能传递到触发器的订阅者。请注意,我们不支持过滤 CloudEvents 的 data 字段。

重要

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

示例

此示例过滤来自 default 代理的事件,这些事件的类型为 dev.knative.foo.bar 并且具有以 -extensions 结尾的扩展 myextension

  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 会在 Trigger 不存在时自动为其创建一个 Broker。该 Broker 在创建 Trigger 的命名空间中创建。此注解仅在您启用了 Sugar Controller 时才有效,Sugar Controller 是可选的且默认不启用。
  • knative.dev/dependency:此注解用于标记 Trigger 所依赖的源。如果其中一个依赖项不可用,则 Trigger 将不可用。

以下 YAML 是带有依赖项的 Trigger 示例

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 共享以达到此目的。了解更多。