HelloWorldWorkflowDistributed アプリケーション - AWS Flow Framework for Java

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

HelloWorldWorkflowDistributed アプリケーション

HelloWorldWorkflow および HelloWorldWorkflowAsync では、Amazon SWF は、ワークフローとアクティビティ実装間の相互作用を仲介しますが、1 つのプロセスとしてローカルに実行されます。GreeterMain は、個別のプロセスですが、同じシステム上で実行されます。

Amazon SWF の主な機能は、分散アプリケーションをサポートすることです。例えば、ワークフローワーカーは Amazon EC2 インスタンス、ワークフロースターターはデータセンターコンピュータ、アクティビティはクライアントデスクトップコンピュータといったように実行できます。さまざまなシステムでさまざまなアクティビティを実行できます。

HelloWorldWorkflowDistributed アプリケーションは、2 つのシステムと 3 つのプロセスでアプリケーションを分散するように、HelloWorldWorkflowAsync を拡張します。

  • ワークフローとワークフロースターターは、別々のプロセスを 1 つのシステムで実行します。

  • アクティビティは、別々のシステムで実行されます。

アプリケーションを実装するには、helloWorld.HelloWorldWorkflowAsync パッケージのコピーをプロジェクトディレクトリに作成し、helloWorld.HelloWorldWorkflowDistributed という名前を付けます。以下のセクションでは、元の HelloWorldWorkflowAsync コードを変更し、2 つのシステムと 3 つのプロセスでアプリケーションを分散する方法について説明します。

別々のシステムで実行するために、ワークフロー実装やアクティビティ実装、バージョン番号を変更する必要はありません。また、GreeterMain の変更も不要です。必要なのは、アクティビティとワークフローのホストの変更のみです。

HelloWorldWorkflowAsync では、1 つのアプリケーションをワークフローとアクティビティのホストとして使用できます。ワークフロー実装とアクティビティの実装を別々のシステムで実行するには、アプリケーションを個別に実装する必要があります。GreeterWorker をプロジェクトから削除して、2 つの新しいクラスファイル (GreeterWorkflowWorker および GreeterActivitiesWorker) を追加します。

HelloWorldWorkflowDistributed は、アクティビティホストを次のように GreeterActivitiesWorker に実装します。

import com.amazonaws.ClientConfiguration; import com.amazonaws.auth.AWSCredentials; import com.amazonaws.auth.BasicAWSCredentials; import com.amazonaws.services.simpleworkflow.AmazonSimpleWorkflow; import com.amazonaws.services.simpleworkflow.AmazonSimpleWorkflowClient; import com.amazonaws.services.simpleworkflow.flow.ActivityWorker; public class GreeterActivitiesWorker { public static void main(String[] args) throws Exception { ClientConfiguration config = new ClientConfiguration().withSocketTimeout(70*1000); String swfAccessId = System.getenv("AWS_ACCESS_KEY_ID"); String swfSecretKey = System.getenv("AWS_SECRET_KEY"); AWSCredentials awsCredentials = new BasicAWSCredentials(swfAccessId, swfSecretKey); AmazonSimpleWorkflow service = new AmazonSimpleWorkflowClient(awsCredentials, config); service.setEndpoint("https://swf.us-east-1.amazonaws.com"); String domain = "helloWorldExamples"; String taskListToPoll = "HelloWorldAsyncList"; ActivityWorker aw = new ActivityWorker(service, domain, taskListToPoll); aw.addActivitiesImplementation(new GreeterActivitiesImpl()); aw.start(); } }

HelloWorldWorkflowDistributed は、ワークフローホストを次のように GreeterWorkflowWorker に実装します。

import com.amazonaws.ClientConfiguration; import com.amazonaws.auth.AWSCredentials; import com.amazonaws.auth.BasicAWSCredentials; import com.amazonaws.services.simpleworkflow.AmazonSimpleWorkflow; import com.amazonaws.services.simpleworkflow.AmazonSimpleWorkflowClient; import com.amazonaws.services.simpleworkflow.flow.WorkflowWorker; public class GreeterWorkflowWorker { public static void main(String[] args) throws Exception { ClientConfiguration config = new ClientConfiguration().withSocketTimeout(70*1000); String swfAccessId = System.getenv("AWS_ACCESS_KEY_ID"); String swfSecretKey = System.getenv("AWS_SECRET_KEY"); AWSCredentials awsCredentials = new BasicAWSCredentials(swfAccessId, swfSecretKey); AmazonSimpleWorkflow service = new AmazonSimpleWorkflowClient(awsCredentials, config); service.setEndpoint("https://swf.us-east-1.amazonaws.com"); String domain = "helloWorldExamples"; String taskListToPoll = "HelloWorldAsyncList"; WorkflowWorker wfw = new WorkflowWorker(service, domain, taskListToPoll); wfw.addWorkflowImplementationType(GreeterWorkflowImpl.class); wfw.start(); } }

GreeterActivitiesWorker は、WorkflowWorker コードを使用しない GreeterWorkerGreeterWorkflowWorker は、ActivityWorker コードを使用しない GreeterWorker です。

ワークフローを実行するには:
  1. GreeterActivitiesWorker で実行できる JAR ファイルをエントリポイントとして作成します。

  2. ステップ 1 から JAR ファイルを別のシステムにコピーします。これにより、Java をサポートするすべてのオペレーティングシステムを実行できます。

  3. 同じ Amazon SWF ドメインへのアクセス許可を持つ AWS 認証情報が他のシステムで利用できることを確認します。

  4. JAR ファイルを実行します。

  5. 開発システムで Eclipse を使用して、GreeterWorkflowWorker および GreeterMain を実行します。

アクティビティがワークフローワーカーやワークフロースターターとは異なるシステムで実行されているという事実を除き、ワークフローは HelloWorldAsync とまったく同じ方法で動作します。ただし、「Hello World!」という文字列をコンソールに出力する println コールは say アクティビティ内にあり、出力はアクティビティワーカーで実行されているシステムに表示されます。