5.14. 触发器
代理可与触发器结合使用,用于将事件源发送到事件 sink。事件从事件源发送到代理,作为 HTTP POST
请求。事件进入代理后,可使用触发器根据 CloudEvent 属性 进行过滤,并作为 HTTP POST
请求发送到事件 sink。
![代理事件交付概述](https://access.redhat.com/webassets/avalon/d/OpenShift_Container_Platform-4.8-Serverless-zh-CN/images/ea40932cc228a1b20e17c5252a49a2f2/serverless-event-broker-workflow.png)
如果使用 Kafka 代理,您可以将事件的交付顺序从触发器配置为事件 sink。请参阅为触发器配置事件交付顺序。
5.14.1. 使用 Web 控制台创建触发器
使用 OpenShift Container Platform Web 控制台提供了一个简化且直观的用户界面来创建触发器。在集群中安装 Knative Eventing 并创建了代理后,您可以使用 web 控制台创建触发器。
先决条件
- OpenShift Serverless Operator、Knative Serving 和 Knative Eventing 已在 OpenShift Container Platform 集群中安装。
- 已登陆到 web 控制台。
- 您已创建了一个项目,或者具有适当的角色和权限访问项目,以便在 OpenShift Container Platform 中创建应用程序和其他工作负载。
- 您已创建了代理和 Knative 服务或其他事件 sink 以连接触发器。
流程
- 在 Developer 视角中,进入 Topology 页。
- 将鼠标悬停在您要创建触发器的代理上,并拖动箭头。此时会显示 Add Trigger 选项。
- 点 Add Trigger。
- 在 Subscriber 列表中选择您的接收器。
- 点 Add。
验证
- 创建订阅后,您可以在 Topology 页面中查看它,其中它是一个将代理连接到事件 sink 的行。
删除触发器
- 在 Developer 视角中,进入 Topology 页。
- 点您要删除的触发器。
- 在 Actions 上下文菜单中,选择 Delete Trigger。
5.14.2. 使用 Knative CLI 创建触发器
使用 Knative (kn
) CLI 创建触发器通过直接修改 YAML 文件,提供更精简且直观的用户界面。您可以使用 kn trigger create
命令创建触发器。
先决条件
- OpenShift Serverless Operator 和 Knative Eventing 已安装在 OpenShift Container Platform 集群中。
-
已安装 Knative (
kn
) CLI。 - 您已创建了一个项目,或者具有适当的角色和权限访问项目,以便在 OpenShift Container Platform 中创建应用程序和其他工作负载。
流程
创建触发器:
$ kn trigger create <trigger_name> --broker <broker_name> --filter <key=value> --sink <sink_name>
或者,您可以创建触发器并使用代理注入同时创建
default
代理:$ kn trigger create <trigger_name> --inject-broker --filter <key=value> --sink <sink_name>
默认情况下,触发器会将发送到代理的所有事件转发到订阅到该代理的 sink。通过对触发器使用
--filter
属性,您可以从代理过滤事件,这样订阅者才会根据您定义的标准接收一小部分事件。
5.14.3. 使用 Knative CLI 列出触发器
使用 Knative (kn
) CLI 列出触发器提供精简、直观的用户界面。您可以使用 kn trigger list
命令列出集群中的现有触发器。
先决条件
- OpenShift Serverless Operator 和 Knative Eventing 已安装在 OpenShift Container Platform 集群中。
-
已安装 Knative (
kn
) CLI。
流程
显示可用触发器列表:
$ kn trigger list
输出示例
NAME BROKER SINK AGE CONDITIONS READY REASON email default ksvc:edisplay 4s 5 OK / 5 True ping default ksvc:edisplay 32s 5 OK / 5 True
可选:以 JSON 格式输出触发器列表:
$ kn trigger list -o json
5.14.4. 使用 Knative CLI 描述触发器
使用 Knative (kn
) CLI 描述触发器,提供了一个简化且直观的用户界面。您可以通过 kn trigger describe
命令使用 Knative CLI 输出集群中现有触发器的信息。
先决条件
- OpenShift Serverless Operator 和 Knative Eventing 已安装在 OpenShift Container Platform 集群中。
-
已安装 Knative (
kn
) CLI。 - 您已创建了触发器。
流程
输入命令:
$ kn trigger describe <trigger_name>
输出示例
Name: ping Namespace: default Labels: eventing.knative.dev/broker=default Annotations: eventing.knative.dev/creator=kube:admin, eventing.knative.dev/lastModifier=kube:admin Age: 2m Broker: default Filter: type: dev.knative.event Sink: Name: edisplay Namespace: default Resource: Service (serving.knative.dev/v1) Conditions: OK TYPE AGE REASON ++ Ready 2m ++ BrokerReady 2m ++ DependencyReady 2m ++ Subscribed 2m ++ SubscriberResolved 2m
5.14.5. 使用 Knative CLI 使用触发器过滤事件
使用 Knative (kn
) CLI 使用 kn CLI 通过触发器过滤事件,可提供精简且直观的用户界面。您可以使用 kn trigger create
命令和适当的标记来通过使用触发器过滤事件。
在以下触发器示例中,只有带有属性 type: dev.knative.samples.helloworld
的事件才会发送到事件 sink:
$ kn trigger create <trigger_name> --broker <broker_name> --filter type=dev.knative.samples.helloworld --sink ksvc:<service_name>
您还可以使用多个属性过滤事件。以下示例演示了如何使用类型、源和扩展属性过滤事件:
$ kn trigger create <trigger_name> --broker <broker_name> --sink ksvc:<service_name> \ --filter type=dev.knative.samples.helloworld \ --filter source=dev.knative.samples/helloworldsource \ --filter myextension=my-extension-value
5.14.6. 使用 Knative CLI 更新触发器
使用 Knative (kn
) CLI 更新触发器提供精简、直观的用户界面。您可以使用带有特定标志的 kn trigger update
命令来更新触发器的属性。
先决条件
- OpenShift Serverless Operator 和 Knative Eventing 已安装在 OpenShift Container Platform 集群中。
-
已安装 Knative (
kn
) CLI。 - 您已创建了一个项目,或者具有适当的角色和权限访问项目,以便在 OpenShift Container Platform 中创建应用程序和其他工作负载。
流程
更新触发器:
$ kn trigger update <trigger_name> --filter <key=value> --sink <sink_name> [flags]
您可以更新触发器来过滤与传入事件匹配的事件属性。例如,使用
type
属性:$ kn trigger update <trigger_name> --filter type=knative.dev.event
您可以从触发器中删除过滤器属性。例如,您可以使用键
type
来删除过滤器属性:$ kn trigger update <trigger_name> --filter type-
您可以使用
--sink
参数来更改触发器的事件 sink:$ kn trigger update <trigger_name> --sink ksvc:my-event-sink
5.14.7. 使用 Knative CLI 删除触发器
使用 Knative (kn
) CLI 删除触发器提供精简而直观的用户界面。您可以使用 kn trigger delete
命令删除触发器。
先决条件
- OpenShift Serverless Operator 和 Knative Eventing 已安装在 OpenShift Container Platform 集群中。
-
已安装 Knative (
kn
) CLI。 - 您已创建了一个项目,或者具有适当的角色和权限访问项目,以便在 OpenShift Container Platform 中创建应用程序和其他工作负载。
流程
删除触发器:
$ kn trigger delete <trigger_name>
验证
列出现有触发器:
$ kn trigger list
验证触发器不再存在:
输出示例
No triggers found.
5.14.8. 为触发器配置事件交付顺序
如果使用 Kafka 代理,您可以将事件的交付顺序从触发器配置为事件 sink。
先决条件
- OpenShift Serverless Operator、Knative Eventing 和 Knative Kafka 安装在 OpenShift Container Platform 集群中。
- Kafka 代理被启用在集群中使用,您也创建了一个 Kafka 代理。
- 您已创建了一个项目,或者具有适当的角色和权限访问项目,以便在 OpenShift Container Platform 中创建应用程序和其他工作负载。
-
已安装 OpenShift (
oc
) CLI。
流程
创建或修改
Trigger
对象并设置kafka.eventing.knative.dev/delivery.order
注解:apiVersion: eventing.knative.dev/v1 kind: Trigger metadata: name: <trigger_name> annotations: kafka.eventing.knative.dev/delivery.order: ordered ...
支持的消费者交付保证有:
unordered
- 未排序的消费者是一种非阻塞消费者,它能以未排序的方式提供消息,同时保持正确的偏移管理。
排序的
一个订购的消费者是一个按分区阻止消费者,在提供分区的下一个消息前等待来自 CloudEvent 订阅者成功响应。
默认排序保证是
unordered
。
应用
Trigger
对象:$ oc apply -f <filename>
5.14.9. 后续步骤
- 配置事件交付参数,当事件无法发送到事件 sink 时。请参阅配置事件交付参数 的示例。