跳至內容

循序終端機

我們將建立下列邏輯設定。我們建立一個 PingSource,將事件饋送至 Sequence。然後,Sequence 可以執行外部工作,或在頻外建立額外事件。

Logical Configuration

這些範例中使用的函式位於 https://github.com/knative/eventing/blob/main/cmd/appender/main.go

先決條件

在此範例中,我們假設您已設定 InMemoryChannel 以及 Knative Serving(用於我們的函式)。範例使用 default 命名空間,同樣地,如果您想要部署至另一個命名空間,您需要修改範例以反映此情況。

如果您想要使用不同類型的 Channel,您必須修改 Sequence.Spec.ChannelTemplate,以建立適當的 Channel 資源。

設定

建立 Knative 服務

首先,建立 Steps 中將參考的 3 個步驟。

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

sequence.yaml 檔案包含建立 Sequence 的規格。如果您使用不同類型的 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

變更以下命令中的 default,以在您想要建立資源的命名空間中建立 Sequence

kubectl -n default create -f ./sequence.yaml

建立以 Sequence 為目標的 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 的記錄來查看最終輸出。請注意,由於我們將 PingSource 設定為每 2 分鐘發出一次,因此事件可能需要一些時間才會顯示在記錄中。

kubectl -n default get pods

讓我們查看 Sequence 中第一個 Step 的記錄

kubectl -n default logs -l serving.knative.dev/service=first -c user-container --tail=-1

2020/03/02 21:28:00 listening on 8080, appending " - Handled by 0" to events
2020/03/02 21:28:01 Received a new event:
2020/03/02 21:28:01 [2020-03-02T21:28:00.0010247Z] /apis/v1/namespaces/default/pingsources/ping-source dev.knative.sources.ping: &{Sequence:0 Message:Hello world!}
2020/03/02 21:28:01 Transform the event to:
2020/03/02 21:28:01 [2020-03-02T21:28:00.0010247Z] /apis/v1/namespaces/default/pingsources/ping-source dev.knative.sources.ping: &{Sequence:0 Message:Hello world! - Handled by 0}
您可以看到,初始的 PingSource 訊息 ("Hello World!") 現在已由 Sequence 中的第一個步驟修改,以包含「- Handled by 0」。令人興奮:)

然後我們可以查看 Sequence 中第二個 Step 的輸出

kubectl -n default logs -l serving.knative.dev/service=second -c user-container --tail=-1

2020/03/02 21:28:02 listening on 8080, appending " - Handled by 1" to events
2020/03/02 21:28:02 Received a new event:
2020/03/02 21:28:02 [2020-03-02T21:28:00.0010247Z] /apis/v1/namespaces/default/pingsources/ping-source dev.knative.sources.ping: &{Sequence:0 Message:Hello world! - Handled by 0}
2020/03/02 21:28:02 Transform the event to:
2020/03/02 21:28:02 [2020-03-02T21:28:00.0010247Z] /apis/v1/namespaces/default/pingsources/ping-source dev.knative.sources.ping: &{Sequence:0 Message:Hello world! - Handled by 0 - Handled by 1}
正如預期的那樣,它現在已由第一個和第二個 Step 處理,如訊息現在為:「Hello world! - Handled by 0 - Handled by 1」所反映。

然後我們可以查看 Sequence 中最後一個 Step 的輸出

kubectl -n default logs -l serving.knative.dev/service=third -c user-container --tail=-1

2020/03/02 21:28:03 listening on 8080, appending " - Handled by 2" to events
2020/03/02 21:28:03 Received a new event:
2020/03/02 21:28:03 [2020-03-02T21:28:00.0010247Z] /apis/v1/namespaces/default/pingsources/ping-source dev.knative.sources.ping: &{Sequence:0 Message:Hello world! - Handled by 0 - Handled by 1}
2020/03/02 21:28:03 Transform the event to:
2020/03/02 21:28:03 [2020-03-02T21:28:00.0010247Z] /apis/v1/namespaces/default/pingsources/ping-source dev.knative.sources.ping: &{Sequence:0 Message:Hello world! - Handled by 0 - Handled by 1 - Handled by 2}

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