シーケンシャルターミナル¶
次の論理構成を作成します。PingSourceを作成し、イベントをSequence
に供給します。Sequenceは、外部作業を実行するか、帯域外で追加のイベントを作成できます。
これらの例で使用されている関数は、https://github.com/knative/eventing/blob/main/cmd/appender/main.goにあります。
前提条件¶
この例では、InMemoryChannel
とKnative Serving(関数用)が設定されていると仮定します。例ではdefault
名前空間を使用していますが、別の名前空間にデプロイする場合は、例を修正して反映する必要があります。
異なるタイプのChannel
を使用する場合は、適切なChannelリソースを作成するようにSequence.Spec.ChannelTemplate
を変更する必要があります。
設定¶
Knativeサービスの作成¶
まず、ステップで参照される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を使用する場合は、目的のChannelを指すようにspec.channelTemplateを変更する必要があります。
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の作成¶
これにより、データペイロードとして{"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: 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}
("Hello World!")
がSequenceの最初のステップによって「 - Handled by 0」を含むように変更されていることがわかります。素晴らしいですね :)
次に、Sequence
の2番目のステップの出力を確認します。
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}
次に、Sequence
の最後のステップの出力を確認します。
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}