連線至 event-display 的序列¶
我們將建立以下邏輯配置。我們建立一個 PingSource,將事件饋送至Sequence
,然後取得該 Sequence
的輸出並顯示結果輸出。
這些範例中使用的函式位於 https://github.com/knative/eventing/blob/main/cmd/appender/main.go。
先決條件¶
在此範例中,我們假設您已設定 InMemoryChannel
和 Knative Serving (用於我們的函式)。範例使用 default
命名空間,同樣地,如果您想要部署到另一個命名空間,您需要修改範例以反映這一點。
如果您想使用不同類型的 Channel
,您必須修改 Sequence.Spec.ChannelTemplate
以建立適當的 Channel 資源。
設定¶
建立 Knative 服務¶
變更以下命令中的 default
,以在您想要建立資源的命名空間中建立步驟
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"
---
kubectl -n default create -f ./steps.yaml
建立序列¶
sequence.yaml
檔案包含建立序列的規格。如果您使用不同類型的 Channel,您需要變更 spec.channelTemplate 以指向您想要的 Channel。
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: Service
apiVersion: serving.knative.dev/v1
name: event-display
變更以下命令中的 default
,以在您想要建立資源的命名空間中建立 Sequence
kubectl -n default create -f ./sequence.yaml
建立顯示序列所建立事件的服務¶
apiVersion: serving.knative.dev/v1
kind: Service
metadata:
name: event-display
spec:
template:
spec:
containers:
- image: gcr.io/knative-releases/knative.dev/eventing/cmd/event_display
變更以下命令中的 default
,以在您想要建立資源的命名空間中建立 Sequence
kubectl -n default create -f ./event-display.yaml
建立以序列為目標的 PingSource¶
這將建立一個 PingSource,每 2 分鐘發送一個包含 {"message": "Hello world!"} 作為資料酬載的 CloudEvent。
apiVersion: sources.knative.dev/v1
kind: PingSource
metadata:
name: ping-source
spec:
schedule: "*/2 * * * *"
contentType: "application/json"
data: '{"message": "Hello world!"}'
sink:
ref:
apiVersion: flows.knative.dev/v1
kind: Sequence
name: sequence
kubectl -n default create -f ./ping-source.yaml
檢查結果¶
您現在可以透過檢查 event-display Pod 的日誌來查看最終輸出。
kubectl -n default get pods
稍等一下,然後查看 event-display Pod 的日誌
kubectl -n default logs -l serving.knative.dev/service=event-display -c user-container --tail=-1
☁️ cloudevents.Event
Validation: valid
Context Attributes,
specversion: 1.0
type: samples.http.mode3
source: /apis/v1/namespaces/default/pingsources/ping-source
id: e8fa7906-ab62-4e61-9c13-a9406e2130a9
time: 2020-03-02T20:52:00.0004957Z
datacontenttype: application/json
Extensions,
knativehistory: 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
traceparent: 00-6e2947379387f35ddc933b9190af16ad-de3db0bc4e442394-00
Data,
{
"id": 0,
"message": "Hello world! - Handled by 0 - Handled by 1 - Handled by 2"
}
您可以看到初始 PingSource 訊息 ("Hello World!")
已由 Sequence 中的每個步驟附加到它。