5.14. 触发器
代理可与触发器结合使用,用于将事件源发送到事件 sink。事件从事件源发送到代理,作为 HTTP POST
请求。事件进入代理后,可使用触发器根据 CloudEvent 属性 进行过滤,并作为 HTTP POST
请求发送到事件 sink。
如果使用 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 时。请参阅配置事件交付参数 的示例。