跳至内容

事件注册表

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 在创建触发器时不需要。

对于消费者来说,最重要的是 specstatus 字段。这是因为这些字段提供了创建触发器所需的信息,即事件的来源和类型以及是否存在接收事件的参考。

下表提供了有关 EventType 对象的 specstatus 字段的更多信息

字段 描述 必需或可选
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 文件

  1. 创建 EventType YAML 文件。有关所需字段的信息,请参阅 关于 EventType 对象

  2. 通过运行以下命令应用 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 的 事件网格 中消费的事件后,您可以创建触发器来订阅特定事件。

以下是一些使用 typesource 进行精确匹配的示例触发器,这些触发器基于前面提到的注册表输出,订阅事件

  • 订阅来自任何源的 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/eventingknative/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,则必须将源指向代理。

我们使用分析和 Cookie 来了解网站流量。有关您使用我们网站的信息将与 Google 共享,以用于该目的。 了解更多。