シーケンス¶
シーケンス CRD は、呼び出される関数の順序付きリストを定義する方法を提供します。各ステップで、イベントを修正、フィルタリング、または新しい種類のイベントを作成できます。シーケンスは、内部で Channel
と Subscription
を作成します。
情報
シーケンスには「ヘアピン」トラフィックが必要です。ポッドがサービス IP 経由で自身に到達できることを確認してください。「ヘアピン」トラフィックが利用できない場合は、クラスターレベル(通常は CNI)の設定であるため、クラスター管理者に問い合わせることができます。
使用法¶
シーケンス仕様¶
シーケンスの仕様には3つの部分があります。
Steps
は、Subscriber
の順序付きリストを定義します。つまり、リストされた順序で実行される関数です。これらは、Subscription
を作成する場合と同様に、messaging.v1.SubscriberSpec
を使用して指定します。各ステップはAddressable
である必要があります。ChannelTemplate
は、ステップ間のChannel
の作成に使用されるテンプレートを定義します。Reply
(オプション) シーケンスの最後のステップの結果が送信される場所への参照。
シーケンスの状態¶
シーケンスの状態には4つの部分があります。
- シーケンスオブジェクト全体のステータスを詳しく示す条件
- このシーケンスの一部として作成された基礎となる
Channel
リソースのステータスを伝える ChannelStatuses。これは配列であり、各ステータスはステップ番号に対応するため、配列内の最初のエントリは、最初のステップの前のChannel
のステータスです。 - このシーケンスの一部として作成された基礎となる
Subscription
リソースのステータスを伝える SubscriptionStatuses。これは配列であり、各ステータスはステップ番号に対応するため、配列内の最初のエントリは、最初のチャネルをSteps
配列の最初のステップに接続するために作成されるSubscription
です。 - AddressStatus は、Addressable を使用できる場所でシーケンスを使用できるように公開されます。このアドレスに送信すると、シーケンスの最初のステップの正面にある
Channel
がターゲットになります。
例¶
次の各例では、イベントのソースとしてPingSource
を使用します。
また、各ステージを通過したことを示すために、受信イベントの非常に簡単な変換を実行する非常にシンプルなトランスフォーマーも使用します。
応答のないシーケンス¶
最初の例では、PingSource
に直接接続された 3 ステップの Sequence
を使用します。各ステップでは、単純に「- ハンドルされたSequence
の最初のステップでは、受信メッセージを取得し、「- ハンドルされた 0」を受信メッセージに追加します。
応答のないシーケンス (最後のステップがターミナル) を参照してください。
応答のあるシーケンス¶
次の例では、PingSource
に直接接続された同じ 3 ステップの Sequence
を使用します。各ステップでは、単純に「- ハンドルされたSequence
の最初のステップでは、受信メッセージを取得し、「- ハンドルされた 0」を受信メッセージに追加します。
」を追加します。唯一の違いは、Subscriber.Spec.Reply
フィールドを使用して、最後のステップの出力をイベント表示ポッドに接続することです。
応答のあるシーケンス (最後のステップが出力を生成) を参照してください。
シーケンスの連結¶
次の例では、PingSource
に直接接続された同じ 3 ステップの Sequence
を使用します。各ステップでは、単純に「- ハンドルされたSequence
の最初のステップでは、受信メッセージを取得し、「- ハンドルされた 0」を受信メッセージに追加します。
唯一の違いは、Subscriber.Spec.Reply
フィールドを使用して、最後のステップの出力を、最初のパイプラインと同じメッセージ変更を行う別の Sequence
(ただし、ステップは異なります) に接続することです。
シーケンスの連結を参照してください。
ブローカー/トリガーモデルでのシーケンスの使用¶
Sequence
をターゲットとするトリガーを作成することもできます。今回は、PingSource
を接続して Broker
にイベントを送信し、Sequence
に結果のイベントをブローカーに再度送信させ、Sequence
の結果を他のトリガーで監視できるようにします。
ブローカー/トリガーモデルでのシーケンスの使用を参照してください。