AWS Flow Framework 基本概念: アクティビティおよびワークフロー間のデータ交換 - AWS Flow Framework Java 用

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

AWS Flow Framework 基本概念: アクティビティおよびワークフロー間のデータ交換

非同期アクティビティクライアントメソッドを呼び出すと、Promise (Future とも呼ばれる) オブジェクトがすぐに返ります。このオブジェクトはアクティビティメソッドの戻り値を表します。初期状態では、Promise は、準備未完了状態であり、戻り値は未定義です。アクティビティメソッドがタスクを完了して戻ると、フレームワークは、ネットワーク全体で戻り値をワークフローワーカーにマーシャリングします。これにより、値が Promise に割り当てられ、オブジェクトは準備状態になります。

アクティビティメソッドに戻り値がない場合でも、Promise を使用してワークフロー実行を管理できます。返された Promise をアクティビティクライアントメソッドまたは非同期ワークフローメソッドに渡すと、オブジェクトの準備が完了するまで実行は延期されます。

1 つ以上の Promise をアクティビティクライアントメソッドに渡すと、フレームワークは、タスクをキューに入れますが、すべてのオブジェクトの準備ができるまでスケジュールを延期します。次に、各 Promise からデータを抽出して、インターネット経由でアクティビティワーカーにマーシャリングし、アクティビティワーカーはそれを標準タイプとしてアクティビティメソッドに渡します。

注記

ワークフローワーカーとアクティビティワーカーの間で大量のデータを転送する必要がある場合は、データを都合のいい場所に保存し、検索情報を渡すことをお勧めします。例えば、Amazon S3 バケットにデータを保存して、その URL を渡すことができます。

Promise <T>Type

Promise<T> タイプは、いくつかの点で Java Future<T> タイプと似ています。どちらのタイプも、非同期メソッドより返る値を表し、最初の時点では定義されていません。オブジェクトの値にアクセスするには、その get メソッドを呼び出します。さらに、2 つのタイプの動作は全く異なります。

  • Future<T> は同期構造のため、アプリケーションは非同期メソッドが完了するまで待機することができます。get を呼び出したが、オブジェクトの準備ができていない場合は、準備ができるまでブロックされます。

  • Promise<T> を使用すると、フレームワークで同期が行われます。get を呼び出したときに、オブジェクトが準備未完了であれば、get から例外がスローされます。

Promise<T> の主な目的は、アクティビティ間のデータを管理することです。これにより、アクティビティは、入力データが有効になるまで実行されません。ワークフローワーカーが Promise<T> オブジェクトに直接アクセスすることはほとんどありません。アクティビティから次のアクティビティにオブジェクトを渡し、フレームワークとアクティビティワーカーに処理を指示します。ワークフローワーカーで、Promise<T> オブジェクトの値にアクセスするには、get メソッドを呼び出す前にオブジェクトが準備状態であることを確認します。

  • Promise<T> オブジェクトを非同期ワークフローメソッドに渡して値を処理することをお勧めします。非同期メソッドでは、入力 Promise<T> オブジェクトの準備が完了するまで実行を延期します。これにより、安全に値にアクセスできるようになります。

  • Promise<T> は、オブジェクトの準備が完了すると true を返す isReady メソッドを公開します。isReady を使用して Promise<T> オブジェクトをポーリングすることは推奨されていませんが、一部の状況では isReady が便利です。例については、「AWS Flow Framework レシピ」を参照してください。

Java の AWS Flow Framework には、Settable<T> タイプも含まれています。このタイプは Promise<T> によって作成され、同様の動作を行います。異なる点は、フレームワークは通常、Promise<T> オブジェクトの値を設定し、ワークフローワーカーは Settable<T> の値を設定することです。例については、「AWS Flow Framework レシピ」を参照してください。

ワークフローワーカーでは、Promise<T> オブジェクトを作成し、その値を設定する必要があります。たとえば、Promise<T> オブジェクトを返す非同期メソッドでは、戻り値を作成します。

  • 入力された値を表すオブジェクトを作成するには、静的な Promise.asPromise メソッドを呼び出します。これにより、適切なタイプの Promise<T> オブジェクトを作成して値を設定し、準備状態になります。

  • Promise<Void> オブジェクトを作成するには、静的な Promise.Void メソッドを呼び出します。

注記

Promise<T> は、有効なすべてのタイプを表すことができます。ただし、インターネット経由でデータをマーシャリングする必要がある場合、タイプとデータコンバータの間に互換性が必要です。詳細については、次のセクションを参照ください。

データコンバータとマーシャリング

AWS Flow Framework はデータコンバータを使用してインターネット経由でデータをマーシャリングします。デフォルトでは、フレームワークは Jackson JSON プロセッサに基づき、データコンバータを使用します。ただし、このコンバータにはいくつかの制限があります。たとえば、文字列をキーとして使用しないマップをマーシャリングすることはできません。デフォルトのコンバータがアプリケーションにとって十分でない場合は、カスタムのデータコンバータを実装できます。詳細については、「DataConverters」を参照してください。