跳至內容

使用觸發器

觸發器代表訂閱來自特定 Broker 的事件的意願。

subscriber 值必須是 Destination

觸發器範例

以下觸發器接收來自 default Broker 的所有事件,並將它們傳遞到 Knative Serving 服務 my-service

  1. 使用以下範例建立 YAML 檔案

    apiVersion: eventing.knative.dev/v1
    kind: Trigger
    metadata:
      name: my-service-trigger
    spec:
      broker: default
      subscriber:
        ref:
          apiVersion: serving.knative.dev/v1
          kind: Service
          name: my-service
    
  2. 執行以下命令來套用 YAML 檔案

    kubectl apply -f <filename>.yaml
    
    其中 <filename> 是您在上一步中建立的檔案名稱。

以下觸發器接收來自 default Broker 的所有事件,並將它們傳遞到 Kubernetes 服務 my-service 的自訂路徑 /my-custom-path

  1. 使用以下範例建立 YAML 檔案

    apiVersion: eventing.knative.dev/v1
    kind: Trigger
    metadata:
      name: my-service-trigger
    spec:
      broker: default
      subscriber:
        ref:
          apiVersion: v1
          kind: Service
          name: my-service
        uri: /my-custom-path
    
  2. 執行以下命令來套用 YAML 檔案

    kubectl apply -f <filename>.yaml
    
    其中 <filename> 是您在上一步中建立的檔案名稱。

觸發器篩選

支援基於任何數量的 CloudEvents 屬性和擴充功能進行各種形式的篩選。如果提供多個 filters,所有篩選器都必須評估為 true,事件才會傳遞到觸發器的訂閱者。請注意,我們不支援篩選 CloudEvents 的 data 欄位。

重要

本節中描述的篩選器目前僅在 Apache Kafka Broker 和 MTChannelBasedBroker 中支援。對於其他 Broker,請參閱 舊版屬性篩選器

範例

此範例篩選來自 default Broker 的類型為 dev.knative.foo.bar 且擴充功能 myextension 以 `-extensions 結尾的事件。

  1. 使用以下範例建立 YAML 檔案

    apiVersion: eventing.knative.dev/v1
    kind: Trigger
    metadata:
      name: my-service-trigger
    spec:
      broker: default
      filters:
        exact:
          type: dev.knative.foo.bar
        suffix:
          myextension: -value
      subscriber:
        ref:
          apiVersion: serving.knative.dev/v1
          kind: Service
          name: my-service
    
  2. 執行以下命令來套用 YAML 檔案

    kubectl apply -f <filename>.yaml
    
    其中 <filename> 是您在上一步中建立的檔案名稱。

支援的篩選方言

exact

CloudEvent 屬性字串值必須與指定的字串值完全符合。比對區分大小寫。如果屬性不是字串,篩選器會將屬性的字串表示與指定的字串值進行比較。

apiVersion: eventing.knative.dev/v1
kind: Trigger
metadata:
  ...
spec:
  ...
  filters:
    - exact:
        type: com.github.push

prefix

CloudEvent 屬性字串值必須以指定的字串值開頭。比對區分大小寫。如果屬性不是字串,篩選器會將屬性的字串表示與指定的字串值進行比較。

apiVersion: eventing.knative.dev/v1
kind: Trigger
metadata:
  ...
spec:
  ...
  filters:
    - prefix:
        type: com.github.

suffix

CloudEvent 屬性字串值必須以指定的字串值結尾。比對區分大小寫。如果屬性不是字串,篩選器會將屬性的字串表示與指定的字串值進行比較。

apiVersion: eventing.knative.dev/v1
kind: Trigger
metadata:
  ...
spec:
  ...
  filters:
    - suffix:
        type: .created

all

所有巢狀篩選運算式都必須評估為 true。

apiVersion: eventing.knative.dev/v1
kind: Trigger
metadata:
  ...
spec:
  ...
  filters:
    - all:
        - exact:
            type: com.github.push
        - exact:
            subject: https://github.com/cloudevents/spec

any

至少一個巢狀篩選運算式必須評估為 true。

apiVersion: eventing.knative.dev/v1
kind: Trigger
metadata:
  ...
spec:
  ...
  filters:
    - any:
        - exact:
            type: com.github.push
        - exact:
            subject: https://github.com/cloudevents/spec

not

巢狀運算式評估結果必須為 false。

apiVersion: eventing.knative.dev/v1
kind: Trigger
metadata:
  ...
spec:
  ...
  filters:
      - not:
          exact:
              type: com.github.push

cesql

提供的 CloudEvents SQL 運算式 必須評估為 true。

重要

Knative 1.15+ 僅支援 CloudEvents SQL v1.0 規格。應驗證在 Knative v1.15 之前撰寫的任何 CESQL 運算式,因為 CESQL 規格中有一些變更。

apiVersion: eventing.knative.dev/v1
kind: Trigger
metadata:
  ...
spec:
  ...
  filters:
    - cesql: "source LIKE '%commerce%' AND type IN ('order.created', 'order.updated', 'order.canceled')"

舊版屬性篩選器

舊版屬性篩選器提供對任何數量的 CloudEvents 屬性以及擴充功能的完全符合篩選。其語意和行為與 exact 篩選方言相同,使用者應盡可能移至 exact 篩選器。但是,為了向後相容性,屬性篩選器將繼續為所有使用者運作。以下範例篩選來自 default Broker 的類型為 dev.knative.foo.bar 且擴充功能 myextension 的值為 my-extension-value 的事件。

apiVersion: eventing.knative.dev/v1
kind: Trigger
metadata:
  name: my-service-trigger
spec:
  broker: default
  filter:
    attributes:
      type: dev.knative.foo.bar
      myextension: my-extension-value
  subscriber:
    ref:
      apiVersion: serving.knative.dev/v1
      kind: Service
      name: my-service

當同時提供 filters 欄位和 filter 欄位時,filters 欄位會覆寫 filter 欄位。例如,在以下觸發器中,將傳遞類型為 dev.knative.a 的事件,而不會傳遞類型為 dev.knative.b 的事件。

apiVersion: eventing.knative.dev/v1
kind: Trigger
metadata:
  name: my-service-trigger
spec:
  broker: default
  filters:
    exact:
      type: dev.knative.a
  filter:
    attributes:
      type: dev.knative.b
  subscriber:
    ref:
      apiVersion: serving.knative.dev/v1
      kind: Service
      name: my-service

觸發器註解

您可以透過設定以下兩個註解來修改觸發器的行為

  • eventing.knative.dev/injection:如果設定為 enabled,Eventing 會在觸發器不存在時自動為觸發器建立 Broker。Broker 會在建立觸發器的命名空間中建立。此註解僅在您啟用 Sugar 控制器時才有效,這是可選的且預設為未啟用。
  • knative.dev/dependency:此註解用於標記觸發器所依賴的來源。如果其中一個依賴項尚未就緒,則觸發器將不會就緒。

以下 YAML 是具有依賴項的觸發器範例

apiVersion: eventing.knative.dev/v1
kind: Trigger
metadata:
  name: my-service-trigger
  annotations:
    knative.dev/dependency: '{"kind":"PingSource","name":"test-ping-source","apiVersion":"sources.knative.dev/v1"}'
spec:
  broker: default
  filter:
    attributes:
      type: dev.knative.foo.bar
      myextension: my-extension-value
    subscriber:
      ref:
        apiVersion: serving.knative.dev/v1
        kind: Service
        name: my-service

我們使用分析和 Cookie 來了解網站流量。關於您使用我們網站的資訊會為了該目的與 Google 分享。了解更多。