AWS Flow Framework 基本概念: タスクリストとタスク実行 - AWS Flow Framework Java 用

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

AWS Flow Framework 基本概念: タスクリストとタスク実行

Amazon SWF は、ワークフローとアクティビティタスクを、名前付きリストに載せることで管理します。Amazon SWF は、少なくとも 2 つのタスクリストを保持します。ひとつはワークフローワーカー用、もうひとつはアクティビティワーカー用です。

注記

タスクリストは、必要なだけいくつでも指定し、リストごとに異なるワーカーを割り当てることができます。タスクリスト数に制限はありません。通常、ワーカーのタスクリストは、ワーカーオブジェクトの作成時にワーカーホストアプリケーションで指定します。

次の HelloWorldWorkflow ホストアプリケーションからの抜粋では、新しいアクティビティワーカーを作成し、それを HelloWorldList アクティビティタスクリストに割り当てます。

public class GreeterWorker { public static void main(String[] args) throws Exception { ... String domain = " helloWorldExamples"; String taskListToPoll = "HelloWorldList"; ActivityWorker aw = new ActivityWorker(service, domain, taskListToPoll); aw.addActivitiesImplementation(new GreeterActivitiesImpl()); aw.start(); ... } }

デフォルトでは、Amazon SWF はワーカーのタスクを HelloWorldList リストでスケジュールします。ワーカーは、このリストに対してタスクのポーリングを行います。タスクリストには任意の名前を指定できます。ワークフローリストとアクティビティリストの両方に同じ名前を使用することもできます。Amazon SWF 内部では、ワークフロー用とアクティビティ用のタスクリスト名が異なる名前空間に配置されるため、2 つのリストは区別されます。

タスクリストを指定しない場合、 はワーカーが Amazon SWF にタイプを登録するときにデフォルトのリスト AWS Flow Framework を指定します。詳細については、「ワークフロータイプとアクティビティタイプの登録」を参照してください。

特定のワーカーやワーカーグループで実行するタスクを分担すると便利な場合があります。たとえば、イメージ処理ワークフローでイメージのダウンロードとイメージの処理を 2 つの異なるアクティビティで分担できます。両方のタスクを同じシステムで実行するほうが効率的です。大きなファイルのネットワーク転送に伴うオーバーヘッドを回避できます。

このようなシナリオをサポートするには、アクティビティメソッドを呼び出すときに、schedulingOptions パラメータを含むオーバーロードを使用してタスクリストを明示的に指定できます。タスクリストを指定するには、適切に設定されたActivitySchedulingOptionsオブジェクトを メソッドに渡します。

例えば、HelloWorldWorkflow アプリケーションの say アクティビティをホストするアクティビティワーカーが getNamegetGreeting とは異なるとします。次の例は、getNamegetGreeting の割り当て先の元のタスクリストが異なる場合でも、この 2 つと同じタスクリストを say で使用する方法を示しています。

public class GreeterWorkflowImpl implements GreeterWorkflow { private GreeterActivitiesClient operations1 = new GreeterActivitiesClientImpl1(); //getGreeting and getName private GreeterActivitiesClient operations2 = new GreeterActivitiesClientImpl2(); //say @Override public void greet() { Promise<String> name = operations1.getName(); Promise<String> greeting = operations1.getGreeting(name); runSay(greeting); } @Asynchronous private void runSay(Promise<String> greeting){ String taskList = operations1.getSchedulingOptions().getTaskList(); ActivitySchedulingOptions schedulingOptions = new ActivitySchedulingOptions(); schedulingOptions.setTaskList(taskList); operations2.say(greeting, schedulingOptions); } }

非同期の runSay メソッドは、getGreeting タスクリストをそのクライアントオブジェクトから取得します。次に、ActivitySchedulingOptions オブジェクトを作成し、saygetGreeting と同じタスクリストをポーリングするように設定します。

注記

schedulingOptions パラメータをアクティビティクライアントメソッドに渡すと、このアクティビティ実行に限り、元のタスクリストが上書きされます。タスクリストを指定しないで、このアクティビティクライアントメソッドを再び呼び出すと、Amazon SWF はタスクを元のリストに割り当て、このリストに対してアクティビティワーカーはポーリングを行います。