跳至內容

事件登錄檔

Knative Eventing 定義了 EventType 物件,讓消費者更容易探索他們可以從 Broker 或 Channel 取用的事件類型。

事件登錄檔維護每個 Broker 或 Channel 可以取用的事件類型目錄。登錄檔中儲存的事件類型包含消費者建立 Trigger 的所有必要資訊,而無需求助於其他頻外機制。

本主題提供有關如何填入事件登錄檔、如何使用登錄檔探索事件,以及如何利用該資訊訂閱感興趣的事件的資訊。

注意

在使用事件登錄檔之前,建議您基本了解 Broker、Trigger、事件來源和 CloudEvents 規格(尤其是 內容屬性部分)。

關於 EventType 物件

EventType 物件代表可以從 Broker 或 Channel 取用的事件類型,例如 Apache Kafka 訊息或 GitHub pull request。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 產生,以避免命名衝突。建立 Trigger 時不需要 metadata.name

對於消費者而言,最重要的欄位是 specstatus。這是因為這些欄位提供您建立 Trigger 所需的資訊,即事件的來源和類型,以及是否出現接收事件的 Reference。

下表包含有關 EventType 物件的 specstatus 欄位的詳細資訊

欄位 描述 必要或選用
spec.type 參照 CloudEvent 類型,因為它會進入 事件網格。事件消費者可以建立篩選此屬性的 Trigger。此欄位為權威性。 必要
spec.source 參照 CloudEvent 來源,因為它會進入 事件網格。事件消費者可以建立篩選此屬性的 Trigger。 必要
spec.schema 包含 EventType 結構描述的有效 URI,例如 JSON 結構描述或 protobuf 結構描述。 選用
spec.description 描述 EventType 內容的字串。 選用
spec.reference 參照可以提供 EventType 的 KResource。 必要
status 告知消費者或叢集運算子,EventType 是否已準備好可供取用。就緒度取決於 KReference 是否存在。 選用

使用事件填入登錄檔

您可以手動或自動使用 EventType 物件填入登錄檔。自動註冊可能比較簡單,但它僅支援部分事件來源。

手動註冊

對於手動註冊,叢集設定器會像套用任何其他 Kubernetes 資源一樣套用 EventTypes YAML 檔案。

若要手動套用 EventTypes YAML 檔案

  1. 建立 EventType YAML 檔案。如需必要欄位的相關資訊,請參閱 關於 EventType 物件

  2. 執行命令來套用 YAML

    kubectl apply -f <event-type.yaml>
    

自動註冊

因為手動註冊可能很繁瑣且容易出錯,Knative 也支援自動註冊 EventTypes。當事件來源執行個體化時,會自動建立 EventTypes。

支援自動註冊

Knative 支援下列事件來源的 EventTypes 自動註冊

  • CronJobSource
  • ApiServerSource
  • GithubSource
  • GcpPubSubSource
  • KafkaSource
  • AwsSqsSource

Knative 支援為符合來源 Duck 類型的來源自動建立 EventTypes。

自動註冊的程序

  • 若要自動註冊 EventTypes,請執行以下命令來套用您的事件來源 YAML 檔案

    kubectl apply -f <event-source.yaml>
    

在您的事件來源執行個體化之後,EventTypes 會新增至登錄檔。

範例:使用 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 會執行個體化,並且因為有兩個主題,所以會將兩個 EventTypes 新增至登錄檔。

使用登錄檔探索事件

使用登錄檔,您可以探索 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 的 事件網格取用哪些事件之後,您可以建立 Trigger 來訂閱特定事件。

以下是一些範例 Trigger,它們使用 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 推送註冊新的來源,此 Trigger 可以取用它們。

  • 訂閱來自 knative/eventing GitHub 儲存庫的 GitHub pull request

    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 準備就緒之前,此 Trigger 的訂閱者無法取用事件。

後續步驟

Knative 程式碼範例是一個很有用的資源,可以幫助您更瞭解一些事件來源。請記住,如果您希望在登錄檔中自動註冊 EventTypes,您必須將來源指向 Broker。

我們使用分析和 Cookie 來瞭解網站流量。您使用我們網站的資訊會因此目的與 Google 分享。瞭解更多。