ブローカーとトリガーを使用したシーケンス¶
以下の論理構成を作成します。PingSourceを作成し、イベントをブローカーに供給します。次に、これらのイベントを3つのステップからなるSequence
に接続するFilter
を作成します。次に、Sequenceの終端から新たに作成されたイベントをブローカーに供給し、それらのイベントを表示する別のトリガーを作成します。
前提条件¶
- Knative Serving
InMemoryChannel
注記
これらの例では、default
名前空間を使用しています。
異なるタイプのChannel
を使用する場合は、適切なChannelリソースを作成するためにSequence.Spec.ChannelTemplate
を変更する必要があります。
これらの例で使用されている関数は、https://github.com/knative/eventing/blob/main/cmd/appender/main.goにあります。
設定¶
ブローカーの作成¶
-
クラスタデフォルトのブローカートップを作成するには、次のYAMLをファイルにコピーします。
apiVersion: eventing.knative.dev/v1 kind: Broker metadata: name: default
-
次のコマンドを実行して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!"}
がシーケンスの各ステップによって追加されていることがわかります。