翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
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
コードを使用しない GreeterWorker
、GreeterWorkflowWorker
は、ActivityWorker
コードを使用しない GreeterWorker
です。
ワークフローを実行するには:
-
GreeterActivitiesWorker
で実行できる JAR ファイルをエントリポイントとして作成します。 -
ステップ 1 から JAR ファイルを別のシステムにコピーします。これにより、Java をサポートするすべてのオペレーティングシステムを実行できます。
-
同じ Amazon SWF ドメインへのアクセス許可を持つ AWS 認証情報が他のシステムで利用できることを確認します。
-
JAR ファイルを実行します。
-
開発システムで Eclipse を使用して、
GreeterWorkflowWorker
およびGreeterMain
を実行します。
アクティビティがワークフローワーカーやワークフロースターターとは異なるシステムで実行されているという事実を除き、ワークフローは HelloWorldAsync とまったく同じ方法で動作します。ただし、「Hello World!」という文字列をコンソールに出力する println
コールは say
アクティビティ内にあり、出力はアクティビティワーカーで実行されているシステムに表示されます。