コンテンツへスキップ

ブローカーとトリガーを使用したシーケンス

以下の論理構成を作成します。PingSourceを作成し、イベントをブローカーに供給します。次に、これらのイベントを3つのステップからなるSequenceに接続するFilterを作成します。次に、Sequenceの終端から新たに作成されたイベントをブローカーに供給し、それらのイベントを表示する別のトリガーを作成します。

前提条件

  • Knative Serving
  • InMemoryChannel

注記

これらの例では、default名前空間を使用しています。

異なるタイプのChannelを使用する場合は、適切なChannelリソースを作成するためにSequence.Spec.ChannelTemplateを変更する必要があります。

Logical Configuration

これらの例で使用されている関数は、https://github.com/knative/eventing/blob/main/cmd/appender/main.goにあります。

設定

ブローカーの作成

  1. クラスタデフォルトのブローカートップを作成するには、次のYAMLをファイルにコピーします。

    apiVersion: eventing.knative.dev/v1
    kind: Broker
    metadata:
     name: default
    
  2. 次のコマンドを実行して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を変更します。

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

シーケンスの作成

sequence.yamlファイルには、シーケンスを作成するための仕様が含まれています。異なるタイプのチャネルを使用する場合は、目的のチャネルを指すようにspec.channelTemplateを変更する必要があります。

また、Brokerを指すようにspec.reply.nameを変更します。

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を変更します。

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

ブローカーをターゲットとするPingSourceの作成

これにより、データペイロードとして{"message": "Hello world!"}を持つCloudEventを2分ごとに送信する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: eventing.knative.dev/v1
      kind: Broker
      name: default

ブローカーとシーケンスを設定した名前空間でPingSourceを作成するには、次のコマンドのdefaultを変更します。

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を変更します。

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を変更します。

kubectl -n default create -f ./display-trigger.yaml

結果の確認

シーケンス-displayポッドのログを確認することで、最終的な出力を確認できます。

kubectl -n default get pods

sequence-displayポッドのログを表示します。

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

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