10.2. チャネルを使用したイベント配信ワークフロー
イベント配信のチャネルおよびサブスクリプションを使用して、イベントをソースからシンクに送信できます。
チャネルは、単一のイベント転送および永続レイヤーを定義するカスタムリソースです。
イベントがチャネルに送信された後に、これらのイベントはサブスクリプションを使用して複数の Knative サービスまたは他のシンクに送信できます。
チャネルインスタンスのデフォルト設定は default-ch-webhook
設定マップで定義されます。開発者はサポートされている Channel
オブジェクトをインスタンス化することで、独自のチャネルを直接作成できます。
10.2.1. サポートされているチャネルタイプ
現時点で、OpenShift Serverless は Knative Eventing テクノロジープレビューの一部として InMemoryChannel
タイプのチャネルの開発目的での使用のみをサポートします。
以下は、InMemoryChannel
チャネルの制限です。
- イベントの永続性は利用できません。Pod がダウンすると、その Pod のイベントが失われます。
-
InMemoryChannel
チャネルはイベントの順序を実装しないため、チャネルで同時に受信される 2 つのイベントはいずれの順序でもサブスクライバーに配信できます。 -
サブスクライバーがイベントを拒否する場合、再配信は試行されません。代わりに、拒否されたイベントは、シンクが存在する場合は
deadLetterSink
オブジェクトに送信されます。これが存在しない場合にはドロップされます。
10.2.1.1. デフォルトの開発チャネル設定の使用
Knative Eventing のインストール時に、以下の default-ch-webhook
設定マップが knative-eventing
namespace に自動的に作成されます。
apiVersion: v1 kind: ConfigMap metadata: name: default-ch-webhook namespace: knative-eventing data: default-ch-config: | clusterDefault: apiVersion: messaging.knative.dev/v1 kind: InMemoryChannel namespaceDefaults: some-namespace: apiVersion: messaging.knative.dev/v1 kind: InMemoryChannel
この設定マップは、クラスター全体のデフォルトのチャネル実装または namespace 固有のデフォルトのチャネル実装のいずれかを指定できます。namespace 固有のデフォルトを設定すると、クラスター全体の設定が上書きされます。
Channel
オブジェクトが作成されると、変更用の受付 Webhook はデフォルトのチャネル実装に基づいて Channel
オブジェクトの spec.channelTemplate
プロパティーのセットを追加します。
spec.channelTemplate
プロパティーを持つ Channel
オブジェクトの例
apiVersion: messaging.knative.dev/v1 kind: Channel metadata: name: example-channel namespace: default spec: channelTemplate: apiVersion: messaging.knative.dev/v1 kind: InMemoryChannel
チャネルコントローラーは、その後に spec.channelTemplate
設定に基づいてサポートするチャネルインスタンスを作成します。
spec.channelTemplate
プロパティーは作成後に変更できません。それらは、ユーザーではなくデフォルトのチャネルメカニズムで設定されるためです。
このメカニズムが使用される場合、汎用チャネル、および InMemoryChannel
チャネルなど 2 つのオブジェクトが作成されます。
汎用チャネルは、サブスクリプションを InMemoryChannel
チャネルにコピーするプロキシーとして機能し、サポートする InMemoryChannel
チャネルのステータスを反映するようにそのステータスを設定します。
この例のチャネルはデフォルトの namespace で作成されるため、チャネルはクラスターのデフォルト (InMemoryChannel) を使用します。