使用触发器¶
触发器代表着对来自特定代理的事件的订阅愿望。
subscriber
值必须是 目标。
示例触发器¶
以下触发器接收来自 default
代理的所有事件,并将它们传递给 Knative Serving 服务 my-service
-
使用以下示例创建一个 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
-
通过运行以下命令应用 YAML 文件
其中kubectl apply -f <filename>.yaml
<filename>
是您在上一步中创建的文件的名称。
以下触发器接收来自 default
代理的所有事件,并将它们传递给 Kubernetes 服务 my-service
的自定义路径 /my-custom-path
-
使用以下示例创建一个 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
-
通过运行以下命令应用 YAML 文件
其中kubectl apply -f <filename>.yaml
<filename>
是您在上一步中创建的文件的名称。
触发器过滤¶
支持基于任意数量的 CloudEvents 属性和扩展的各种形式的过滤。如果提供了多个 filters
,则所有 filters
都必须评估为 true,事件才能传递给触发器的订阅者。请注意,我们不支持对 CloudEvents 的 data
字段进行过滤。
重要
本节中描述的过滤器目前仅在 Apache Kafka Broker 和 MTChannelBasedBroker 中受支持。对于其他代理,请参考 传统属性过滤器。
示例¶
此示例过滤来自 default
代理的类型为 dev.knative.foo.bar
且扩展名为 myextension
且以 `-extensions 结尾的事件。
-
使用以下示例创建一个 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
-
通过运行以下命令应用 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