調整

調整アクティビティとは

[調整]アクティビティは、トークンを複数のトークンに分割し、複数のトークン間のタイミングを調整するための簡単な方法です。また、コネクターを使用して、トークンが作成されたとき、お互いに待機しているとき、一緒に戻ってきたときに視覚的にレイアウトすることによって、ロジックの可視性を向上させます。

[調整]アクティビティで可能なアプリケーションには、次のようなものがあります。

  • 調整されたタスクシーケンス - 一連のタスクを一緒に実行するには、複数のオペレーターが必要な場合があります。[調整]アクティビティを使用して、各オペレーターのトークンを作成し、特定のタスクを完了したときに同期させ、タスクが終了したときに余分なトークンを破棄できます。
  • 並行処理 - 一度に複数のプロセスを開始し、それらを同時に実行させてから、すべてのプロセスが完了するのを待つ必要がある場合があります。たとえば、医師が一連の検査を命じ、サンプルが別々の領域に送られて並行して処理されるとします。各検査の結果が完了したら、医師は通知を受ける必要があります。[調整]アクティビティを使用すると、テストのロジックを同時に実行する各テストを表すトークンを作成し、医師が結果を見る前にすべてのトークンを再結合させることができます。

調整で使用される処理フローアクティビティ

次のセクションで説明するように、3つの[調整]アクティビティがあります。

分割

トークンが[分割]アクティビティに入ると、トークンは複数のトークンに分割され、送信コネクターを通じてリリースされます。リリースされるトークンの数は、送信コネクターの数に基づいています。

[分割]アクティビティを使用する場合の重要な考慮事項:

  • コネクターの数 - [分割]アクティビティには、必要に応じた数の着信コネクターまたは送信コネクターを含めることができます。着信コネクターの数は、その動作に影響せず、送信コネクターの数だけに影響します。
  • ラベル - [分割]アクティビティでは、元のトークンへの参照を含む、新しく作成された各トークンにラベルが追加されます。デフォルトでは、このラベルの名前は[SplitID]ですが、必要に応じてそのラベルをカスタマイズできます。このラベルを[結合]アクティビティまたは[同期]アクティビティで使用して、トークンを処理フローの下流でお互いに待機させることができます。詳細については、「分割ID」を参照してください。

このアクティビティのプロパティの詳細については、「分割」を参照してください。

結合

[結合]アクティビティは、1つのトークンを解放する前に、それぞれの着信コネクターからのトークンがあるまで待機します。

[結合]アクティビティを使用する場合の重要な考慮事項:

  • コネクターの数 - [結合]アクティビティには、必要に応じた数の着信コネクターを含めることができますが、送信コネクターは1つしか含めることができません。異なる数の着信コネクターと送信コネクターが必要な場合は、[分割]アクティビティと組み合わせて[結合]アクティビティを使用できます。
  • パーティション - 必要に応じて、一致するパーティションIDを持つトークンのみを結合させるように[結合]アクティビティを設定できます。つまり、トークンを共通の属性に基づいてグループに並べ替える場合は、一致するラベルを持つトークンを結合できます(パーティションの詳細については、次のセクション「波とパーティション」を参照してください)。
  • 最大アイドルタイマーと最大待機タイマー - [結合]アクティビティでは、それぞれの着信コネクターからまだトークンを得ていなくても、アクティビティが最大時間経過後にトークンをリリースするように、最大待機タイマーと最大アイドルタイマーを使用するオプションもあります。

このアクティビティのプロパティの詳細については、「結合」を参照してください。

同期

[同期]アクティビティは、各着信コネクターからのトークンがあるまで待機し、同時にすべてのトークンをリリースします。[同期]アクティビティは[結合]アクティビティに似ていますが、トークンを1つだけリリースするのではなく、すべてのトークンを同時にリリースします。

[同期]アクティビティを使用する場合の重要な考慮事項:

  • コネクター数 - [同期]アクティビティを使用する場合は、着信コネクターと同じ数の送信コネクターを持つことが重要です。
  • コネクターのランキング - 着信および送信コネクターのランクを確認することも重要です。[同期]アクティビティでは、1番目の着信コネクター(ランク1)から入ったトークンは1番目の送信コネクター(ランク1)からリリースされます。2番目の着信コネクターに入ったトークンは、2番目の送信コネクターからリリースされます。
  • パーティション - 必要に応じて、一致するパーティションIDを持つトークンを収集およびリリースするように[同期]アクティビティを設定できます。つまり、トークンを共通の属性に基づいてグループに並べ替える場合は、一致するラベルを持つトークンを同期させることができます。(パーティションの詳細については、次のセクション「波とパーティション」を参照してください)。

このアクティビティのプロパティの詳細については、「同期」を参照してください。

調整アクティビティの特徴

処理フローの使用時は、アクティビティのプロパティ(設定)を編集することによってアクティビティのロジックと動作を制御していました。これは[調整]アクティビティの場合には当てはまりません。[調整]にはカスタマイズできるプロパティがいくつかありますが、[調整]アクティビティの動作は通常、着信コネクターと送信コネクターによって決まります。

処理フローアクティビティでは通常、トークンが入るとき、アクティビティへの入力にどの着信コネクターが使われたかはまったく問題になりません。たとえば、[遅延]アクティビティでは、すべての入るトークンに同じ処理を行います。トークンがどのコネクターに由来していても、[遅延]アクティビティは、各入力トークンに対して同じ遅延時間または統計分布を適用します。対照的に、[結合]アクティビティは、トークンをリリースする前に、各着信コネクターからトークンが入るまで待機します。つまり、到着するトークンが[結合]アクティビティで待機する時間は、次のように決定されます。

  1. どのコネクターから入力されたか
  2. 他の待機トークンが他のコネクターを介して入っているかどうか

着信コネクターの数によってこれらのアクティビティが待つべきトークンの数が決まるため、着信コネクターの数も重要です。

送信コネクターの数は、[分割]アクティビティと[同期]アクティビティの動作に影響します。これらのアクティビティでは、複数の送信コネクターが許可されます。ほとんどの処理フローアクティビティでは複数の送信コネクターは許可されませんが、これが許可される処理フローでは、一度に1つの送信コネクターからしかトークンをリリースできません。

たとえば、[決定]アクティビティに3つの送信コネクターがあるとしても、アクティビティのプロパティを使用して、3つの送信コネクターの1つにトークンを送信します。対照的に、[分割]アクティビティと[同期]アクティビティは同時にすべての送信コネクターを介してトークンをリリースします。このため、送信コネクターの数は重要です。これは、同時にアクティビティからリリースされるトークンの数に影響するためです。

コネクターについての主要な概念

3つの調整アクティビティを使用する際に注意すべき最も重要なことは、持っている着信コネクターと送信コネクターの数です。使用するアクティビティに応じて、コネクターは次に影響します。

  • トークンをリリースする前にアクティビティが収集すべきトークンの数
  • アクティビティがリリースするトークンの数
  • トークンがどのコネクターからリリースされるか

次の表は、コネクターが調整アクティビティの動作にどのように影響を与えるかをまとめたものです。

アクティビティ 着信コネクター 発信コネクター
分割
  • 着信コネクターの数に制限はありません
  • 送信コネクターの数に制限はありません
  • 送信コネクターごとに1つのトークンを作成してリリースします
結合
  • 着信コネクターの数に制限はありません
  • 各着信コネクターからトークンが1つ入るまでトークンをリリースしません
  • パーティションIDに基づき、入るトークンをグループに分類できます(詳細については、次のセクション「波とパーティション」を参照してください)
  • 1つの送信コネクターのみを持つことができます
  • 送信コネクターから1つのトークンをリリースします
  • リリースされたトークンは、1番目のコネクターを介して入力されたトークンのラベルを継承します
  • 1番目のコネクター、つまりランク1のコネクターを介して入力されたトークンのみをリリースします。他のすべてのトークンは破棄されます(詳細については、次のセクション「コネクターのランキング」を参照してください)
同期
  • 必要に応じた数の着信コネクターを持つことができますが、送信コネクターと同じ数の着信コネクターを持つ必要があります
  • パーティションIDに基づき、入るトークンをグループに分類できます(詳細については、次のセクション「波とパーティション」を参照してください)
  • 各送信コネクターから1つのトークンをリリースします
  • 着信コネクターの数が送信コネクターの数と一致しない場合、システムコンソールに警告が表示されます
  • 次のセクション「コネクターのランキング」で説明するように、コネクターのランキングを使用してトークンを送信するコネクターを決定します

コネクターのランキング

[結合]アクティビティと[同期]アクティビティを使用する場合、着信および送信コネクターのランクを確認することが重要です。[結合]アクティビティでは、1番目の着信コネクター(ランク1のコネクター)を介して入ったトークンをリリースするのみで、他のトークンは破棄されます。このため、リリースする必要のあるトークンが[結合]アクティビティの最初のコネクターを介して入ってくるトークンであることを確認します。

[同期]アクティビティでは、1番目の着信コネクター(ランク1のコネクター)から入ったトークンを、1番目の送信コネクター(同様にランク1)からリリースします。2番目の着信コネクターに入ったトークンは、2番目の送信コネクターからリリースされます。

たとえば、次の画像は、ランク1~3の3つの着信コネクターが左から右へ並んだ[同期]アクティビティを示しています。送信コネクターは、異なるランキングパターンを有します。赤いトークンは、左側のランク1のコネクターから入ってきて、右側のランク1のコネクターから出てきます。

コネクターのランク番号編集の詳細については、「発信コネクターのランク番号または名前を変更する」を参照してください。

波とパーティション

前のセクションで説明したように、[結合]アクティビティと[同期]アクティビティには、任意の数の着信コネクターを含めることができます。ただし、これらのアクティビティが持つコネクターの数は、その動作に影響します。これらの両方のアクティビティは、各着信コネクターにトークンがあるまで待機します。各着信コネクターにトークンが1つずつある場合、これらのトークンは1つのでリリースされます。波とは、同時にリリースされるトークンのグループです。

[結合]アクティビティまたは[同期]アクティビティが1つの着信コネクターから複数のトークンを受信すると、追加の波が作成されます。次の画像は、トークンを受け取り、波を作成するときに結合アクティビティ内で何が起きるかを視覚化したものです。

[結合]アクティビティおよび[同期]アクティビティでは、パーティションIDを使用して共通の属性を共有するトークンを使用して波を作成することもできます。パーティションIDは、入るトークンのラベルによって定義され、オブジェクトまたはノードの番号、文字列、または参照がこれになることがあります。[結合]アクティビティと[同期]アクティビティは、トークン上のラベルからのデータに基づいて、入るトークンを並べ替えて波にできます。

たとえば、次の画像ではAとBという2つの異なる製品タイプを持つシステムをシミュレートしています。各入るトークンにはproductTypeという名前のラベルが付いています。[ラベルを割り当てる]アクティビティは、「A」または「B」のいずれかの値を割り当てます。トークンが[結合]アクティビティに入ると、それは1)どのコネクターから来たのか、2)パーティションID([productType]ラベルに基づく)に基づいて、それらを波に割り当てます。一致するパーティションIDを持つ各コネクターからのトークンを取得した後、波をリリースします。

必要に応じて、パーティションIDラベルの値を混合データタイプで使用できます。つまり、値の一部が数値で、値の一部が文字列やオブジェクト参照などであっても問題ありません。[結合]アクティビティと[同期]アクティビティは、新しいパーティションに一意の値を持つトークンを割り当てるだけです。たとえば、[結合]アクティビティと[同期]アクティビティでは、数値5のトークンを1つのパーティションに入れ、文字列の値が「5」のトークンを別のパーティションに配置します。

パーティションIDを定義する

[パーティションID]プロパティを使用して、[結合]アクティビティと[同期]アクティビティがどのラベルを使用してパーティションを作成するかを定義できます。たとえば、前の画像で使用された[結合]アクティビティは、[パーティションID]ボックスで[productType]ラベルを使用するように設定されていました。

分割ID

[分割]アクティビティは、作成したすべてのトークンに分割IDを作成します。分割IDは、分割された元のトークンへの参照を含むラベルです。デフォルトでは、このラベルの名前は[SplitID]ですが、必要に応じてそのラベルをカスタマイズできます。

分割IDラベルを[結合]アクティビティまたは[同期]アクティビティで使用して、分割されたトークンを処理フローの下流でお互いに待機させることができます。たとえば、次の処理フローでは、[分割]アクティビティがトークンに分割IDを割り当てます。次に、[同期]アクティビティが、入るトークンを分割IDラベルに基づいてパーティションに入れます。