コンテンツへスキップ

event-displayに接続されたSequence

ここでは、次の論理構成を作成します。 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 Serviceを作成する

次のコマンドの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を作成する

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
  reply:
    ref:
      kind: Service
      apiVersion: serving.knative.dev/v1
      name: event-display

次のコマンドのdefaultを変更して、リソースを作成する名前空間にSequenceを作成します。

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

Sequenceによって作成されたイベントを表示するServiceを作成する

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

SequenceをターゲットとするPingSourceを作成する

これにより、2分ごとにデータペイロードとして{"message": "Hello world!"}を含むCloudEventを送信するPingSourceが作成されます。

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ポッドのログを確認すると、最終出力が表示されます。

kubectl -n default get pods

少し待ってから、event-displayポッドのログを確認します。

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の各ステップによって追加されていることがわかります。

サイトのトラフィックを理解するために、分析とCookieを使用しています。当サイトの使用に関する情報は、その目的のためにGoogleと共有されます。詳細はこちら