搭配 Broker 和觸發器使用序列¶
我們將建立以下邏輯配置。我們建立一個 PingSource,將事件饋送到 Broker 中,然後我們建立一個 Filter
,將這些事件連接到由 3 個步驟組成的 Sequence
。然後我們取得序列的結尾,並將新產生的事件饋送回 Broker,並建立另一個觸發器,以顯示這些事件。
先決條件¶
- Knative Serving
InMemoryChannel
注意
範例使用 default
命名空間。
如果您想要使用不同類型的 Channel
,您必須修改 Sequence.Spec.ChannelTemplate
以建立適當的 Channel 資源。
這些範例中使用的函數位於 https://github.com/knative/eventing/blob/main/cmd/appender/main.go。
設定¶
建立 Broker¶
-
若要建立叢集預設 Broker 類型,請將以下 YAML 複製到檔案中
apiVersion: eventing.knative.dev/v1 kind: Broker metadata: name: default
-
執行命令來套用 YAML 檔案
其中kubectl apply -f <filename>.yaml
<filename>
是您在上一個步驟中建立的檔案名稱。
建立 Knative 服務¶
apiVersion: serving.knative.dev/v1
kind: Service
metadata:
name: first
spec:
template:
spec:
containers:
- image: gcr.io/knative-releases/knative.dev/eventing/cmd/appender
env:
- name: MESSAGE
value: " - Handled by 0"
---
apiVersion: serving.knative.dev/v1
kind: Service
metadata:
name: second
spec:
template:
spec:
containers:
- image: gcr.io/knative-releases/knative.dev/eventing/cmd/appender
env:
- name: MESSAGE
value: " - Handled by 1"
---
apiVersion: serving.knative.dev/v1
kind: Service
metadata:
name: third
spec:
template:
spec:
containers:
- image: gcr.io/knative-releases/knative.dev/eventing/cmd/appender
env:
- name: MESSAGE
value: " - Handled by 2"
- name: TYPE
value: "samples.http.mod3"
---
變更以下命令中的 default
,以在您設定 Broker 的命名空間中建立服務
kubectl -n default create -f ./steps.yaml
建立序列¶
sequence.yaml
檔案包含建立序列的規格。如果您使用不同類型的通道,則需要變更 spec.channelTemplate 以指向您想要的通道。
此外,請變更 spec.reply.name 以指向您的 Broker
apiVersion: flows.knative.dev/v1
kind: Sequence
metadata:
name: sequence
spec:
channelTemplate:
apiVersion: messaging.knative.dev/v1
kind: InMemoryChannel
steps:
- ref:
apiVersion: serving.knative.dev/v1
kind: Service
name: first
- ref:
apiVersion: serving.knative.dev/v1
kind: Service
name: second
- ref:
apiVersion: serving.knative.dev/v1
kind: Service
name: third
reply:
ref:
kind: Broker
apiVersion: eventing.knative.dev/v1
name: default
變更以下命令中的 default
,以在您設定 Broker 的命名空間中建立序列
kubectl -n default create -f ./sequence.yaml
建立以 Broker 為目標的 PingSource¶
這會建立一個 PingSource,每 2 分鐘傳送一個 CloudEvent,並以 {"message": "Hello world!"} 作為資料酬載。
apiVersion: sources.knative.dev/v1
kind: PingSource
metadata:
name: ping-source
spec:
schedule: "*/2 * * * *"
contentType: "application/json"
data: '{"message": "Hello world!"}'
sink:
ref:
apiVersion: eventing.knative.dev/v1
kind: Broker
name: default
變更以下命令中的 default
,以在您設定 Broker 和序列的命名空間中建立 PingSource
kubectl -n default create -f ./ping-source.yaml
建立以序列為目標的觸發器¶
apiVersion: eventing.knative.dev/v1
kind: Trigger
metadata:
name: sequence-trigger
spec:
broker: default
filter:
attributes:
type: dev.knative.sources.ping
subscriber:
ref:
apiVersion: flows.knative.dev/v1
kind: Sequence
name: sequence
變更以下命令中的 default
,以在您設定 Broker 和序列的命名空間中建立觸發器
kubectl -n default create -f ./trigger.yaml
建立服務和觸發器以顯示序列建立的事件¶
apiVersion: serving.knative.dev/v1
kind: Service
metadata:
name: sequence-display
spec:
template:
spec:
containers:
- image: gcr.io/knative-releases/knative.dev/eventing/cmd/event_display
---
apiVersion: eventing.knative.dev/v1
kind: Trigger
metadata:
name: display-trigger
spec:
broker: default
filter:
attributes:
type: samples.http.mod3
subscriber:
ref:
apiVersion: serving.knative.dev/v1
kind: Service
name: sequence-display
---
變更以下命令中的 default
,以在您設定 Broker 的命名空間中建立服務和觸發器
kubectl -n default create -f ./display-trigger.yaml
檢查結果¶
您現在可以透過檢查 sequence-display pod 的日誌來查看最終輸出。
kubectl -n default get pods
檢視 sequence-display
pod 的日誌
kubectl -n default logs -l serving.knative.dev/service=sequence-display -c user-container --tail=-1
☁️ cloudevents.Event
Validation: valid
Context Attributes,
specversion: 1.0
type: samples.http.mod3
source: /apis/v1/namespaces/default/pingsources/ping-source
id: 159bba01-054a-4ae7-b7be-d4e7c5f773d2
time: 2020-03-03T14:56:00.000652027Z
datacontenttype: application/json
Extensions,
knativearrivaltime: 2020-03-03T14:56:00.018390608Z
knativehistory: default-kne-trigger-kn-channel.default.svc.cluster.local; sequence-kn-sequence-0-kn-channel.default.svc.cluster.local; sequence-kn-sequence-1-kn-channel.default.svc.cluster.local; sequence-kn-sequence-2-kn-channel.default.svc.cluster.local; default-kne-trigger-kn-channel.default.svc.cluster.local
traceparent: 00-e893412106ff417a90a5695e53ffd9cc-5829ae45a14ed462-00
Data,
{
"id": 0,
"message": "Hello world! - Handled by 0 - Handled by 1 - Handled by 2"
}
您可以看到初始 PingSource 訊息 {"Hello World!"}
已由序列中的每個步驟附加到其中。