使用觸發器¶
觸發器代表訂閱來自特定 Broker 的事件的意願。
subscriber
值必須是 Destination。
觸發器範例¶
以下觸發器接收來自 default
Broker 的所有事件,並將它們傳遞到 Knative Serving 服務 my-service
-
使用以下範例建立 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
-
執行以下命令來套用 YAML 檔案
其中kubectl apply -f <filename>.yaml
<filename>
是您在上一步中建立的檔案名稱。
以下觸發器接收來自 default
Broker 的所有事件,並將它們傳遞到 Kubernetes 服務 my-service
的自訂路徑 /my-custom-path
-
使用以下範例建立 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
-
執行以下命令來套用 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 結尾的事件。
-
使用以下範例建立 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
-
執行以下命令來套用 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