使用触发器¶
触发器表示希望订阅来自特定代理(broker)的事件的意愿。
subscriber 的值必须是一个 Destination。
触发器示例¶
以下触发器接收来自 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,则它们都必须评估为 true,事件才能传递到触发器的订阅者。请注意,我们不支持过滤 CloudEvents 的 data 字段。
重要
本节中描述的过滤器目前仅受 Apache Kafka Broker 和 MTChannelBasedBroker 支持。对于其他代理,请参阅 遗留属性过滤器。
示例¶
此示例过滤来自 default 代理的事件,这些事件的类型为 dev.knative.foo.bar 并且具有以 -extensions 结尾的扩展 myextension。
-
使用以下示例创建 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 会在 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