事件注册表¶
Knative 事件定义了一个 EventType
对象,以便消费者更容易发现他们可以从 Broker 或 Channel 消费的事件类型。
事件注册表维护着每个 Broker 或 Channel 可以消费的事件类型的目录。存储在注册表中的事件类型包含消费者创建触发器所需的所有信息,而无需诉诸其他带外机制。
本主题提供有关如何填充事件注册表、如何使用注册表发现事件以及如何利用这些信息订阅感兴趣的事件的信息。
注意
在使用事件注册表之前,建议您对 Broker、触发器、事件源和 CloudEvents 规范(特别是 上下文属性 部分)有一个基本了解。
关于 EventType 对象¶
EventType 对象代表可以从 Broker 或 Channel 消费的一种事件类型,例如 Apache Kafka 消息或 GitHub 拉取请求。EventType 对象用于填充事件注册表并在集群数据存储中持久化事件类型信息。
以下是一个省略无关字段的示例 EventType YAML
apiVersion: eventing.knative.dev/v1beta2
kind: EventType
metadata:
name: dev.knative.source.github.push-34cnb
namespace: default
labels:
eventing.knative.dev/sourceName: github-sample
spec:
type: dev.knative.source.github.push
source: https://github.com/knative/eventing
schema:
description:
reference:
apiVersion: eventing.knative.dev/v1
kind: Broker
name: default
status:
conditions:
- status: "True"
type: ReferenceExists
- status: "True"
type: Ready
有关 EventType 对象的完整规范,请参阅 EventType API 参考。
metadata.name
字段是建议性的,即非权威性的。它通常使用 generateName
生成,以避免命名冲突。metadata.name
在创建触发器时不需要。
对于消费者来说,最重要的是 spec
和 status
字段。这是因为这些字段提供了创建触发器所需的信息,即事件的来源和类型以及是否存在接收事件的参考。
下表提供了有关 EventType 对象的 spec
和 status
字段的更多信息
字段 | 描述 | 必需或可选 |
---|---|---|
spec.type |
引用进入 事件网格 的 CloudEvent 类型。事件消费者可以创建根据此属性进行过滤的触发器。此字段具有权威性。 | 必需 |
spec.source |
引用进入 事件网格 的 CloudEvent 源。事件消费者可以创建根据此属性进行过滤的触发器。 | 必需 |
spec.schema |
具有 EventType 架构的有效 URI,例如 JSON 架构或 protobuf 架构。 | 可选 |
spec.description |
描述 EventType 的字符串。 | 可选 |
spec.reference |
引用可以提供 EventType 的 KResource。 | 必需 |
status |
告诉消费者或集群运营商 EventType 是否已准备好被消费。就绪状态基于 KReference 是否存在。 | 可选 |
使用事件填充注册表¶
您可以手动或自动使用 EventType 对象填充注册表。自动注册可能更简单,但它只支持一部分事件源。
手动注册¶
对于手动注册,集群配置器应用 EventType YAML 文件,与任何其他 Kubernetes 资源相同。
要手动应用 EventType YAML 文件
-
创建 EventType YAML 文件。有关所需字段的信息,请参阅 关于 EventType 对象。
-
通过运行以下命令应用 YAML
kubectl apply -f <event-type.yaml>
自动注册¶
由于手动注册可能很繁琐且容易出错,因此 Knative 还支持自动注册 EventType。在实例化事件源时会自动创建 EventType。
支持自动注册¶
Knative 支持以下事件源的 EventType 自动注册
- CronJobSource
- ApiServerSource
- GithubSource
- GcpPubSubSource
- KafkaSource
- AwsSqsSource
Knative 支持为符合 Sources Duck 类型的源自动创建 EventType。
自动注册过程¶
-
要自动注册 EventType,请通过运行以下命令应用事件源 YAML 文件
kubectl apply -f <event-source.yaml>
实例化事件源后,EventType 将添加到注册表中。
示例:使用 KafkaSource 自动注册¶
假设以下 KafkaSource 示例用于填充注册表
apiVersion: sources.knative.dev/v1beta1
kind: KafkaSource
metadata:
name: kafka-sample
namespace: default
spec:
bootstrapServers:
- my-cluster-kafka-bootstrap.kafka:9092
topics:
- knative-demo
- news
sink:
apiVersion: eventing.knative.dev/v1
kind: Broker
name: default
上述示例中的 topics
字段用于生成 EventType source
字段。
使用上述 YAML 运行 kubectl apply
后,将实例化 KafkaSource kafka-source-sample
,并向注册表添加两个 EventType,因为存在两个主题。
使用注册表发现事件¶
使用注册表,您可以发现 Broker 事件网格 可以消费的不同事件类型。
注意
使用 EventType 自动创建功能,您可以在注册表中看到更多事件类型。了解 此处 如何启用此功能。
查看您可以订阅的所有事件类型¶
-
要查看注册表中可供订阅的事件类型的列表,请运行以下命令
kubectl get eventtypes -n <namespace>
测试集群中使用
default
命名空间的示例输出NAME TYPE SOURCE SCHEMA BROKER DESCRIPTION READY REASON dev.knative.source.github.push-34cnb dev.knative.source.github.push https://github.com/knative/eventing default True dev.knative.source.github.push-44svn dev.knative.source.github.push https://github.com/knative/serving default True dev.knative.source.github.pullrequest-86jhv dev.knative.source.github.pull_request https://github.com/knative/eventing default True dev.knative.source.github.pullrequest-97shf dev.knative.source.github.pull_request https://github.com/knative/serving default True dev.knative.kafka.event-cjvcr dev.knative.kafka.event /apis/v1/namespaces/default/kafkasources/kafka-sample#news default True dev.knative.kafka.event-tdt48 dev.knative.kafka.event /apis/v1/namespaces/default/kafkasources/kafka-sample#knative-demo default True google.pubsub.topic.publish-hrxhh google.pubsub.topic.publish //pubsub.googleapis.com/knative/topics/testing dev False BrokerIsNotReady
此示例输出显示了
default
命名空间的注册表中的七个不同的 EventType 对象。它假设发出事件的事件源将其接收器引用为一个 Broker。
查看 EventType 对象的 YAML¶
-
要查看 EventType 对象的 YAML,请运行以下命令
其中kubectl get eventtype <name> -o yaml
<name>
是 EventType 对象的名称,可以在注册表输出的NAME
列中找到。例如,dev.knative.source.github.push-34cnb
。
有关示例 EventType YAML,请参阅本页前面的 关于 EventType 对象。
关于订阅事件¶
在您了解了可以从 Broker 的 事件网格 中消费的事件后,您可以创建触发器来订阅特定事件。
以下是一些使用 type
或 source
进行精确匹配的示例触发器,这些触发器基于前面提到的注册表输出,订阅事件
-
订阅来自任何源的 GitHub 推送
apiVersion: eventing.knative.dev/v1 kind: Trigger metadata: name: push-trigger namespace: default spec: broker: default filter: attributes: type: dev.knative.source.github.push subscriber: ref: apiVersion: serving.knative.dev/v1 kind: Service name: push-service
注意
如示例注册表输出所述,只有两个源,
knative/eventing
和knative/serving
GitHub 存储库,存在于那种特定类型的事件中。如果以后为 GitHub 推送注册了新的源,则此触发器能够消费它们。 -
订阅来自
knative/eventing
GitHub 存储库的 GitHub 拉取请求apiVersion: eventing.knative.dev/v1 kind: Trigger metadata: name: gh-knative-eventing-pull-trigger namespace: default spec: broker: default filter: attributes: type: dev.knative.source.github.pull_request source: https://github.com/knative/eventing subscriber: ref: apiVersion: serving.knative.dev/v1 kind: Service name: gh-knative-eventing-pull-service
-
订阅发送到 knative-demo 主题的 Kafka 消息
apiVersion: eventing.knative.dev/v1 kind: Trigger metadata: name: kafka-knative-demo-trigger namespace: default spec: broker: default filter: attributes: type: dev.knative.kafka.event source: /apis/v1/namespaces/default/kafkasources/kafka-sample#knative-demo subscriber: ref: apiVersion: serving.knative.dev/v1 kind: Service name: kafka-knative-demo-service
-
订阅来自 GCP 的 knative 项目发送到 testing 主题的 PubSub 消息
apiVersion: eventing.knative.dev/v1 kind: Trigger metadata: name: gcp-pubsub-knative-testing-trigger namespace: default spec: broker: dev filter: attributes: source: //pubsub.googleapis.com/knative/topics/testing subscriber: ref: apiVersion: serving.knative.dev/v1 kind: Service name: gcp-pubsub-knative-testing-service
注意
前面提到的示例注册表输出列出了此 Broker 的就绪状态为
false
。此触发器的订阅者无法消费事件,直到 Broker 变为就绪状态。
下一步¶
Knative 代码示例 是一个了解一些事件源的有效资源。请记住,如果要自动在注册表中注册 EventType,则必须将源指向代理。