Amazon Simple Workflow Serviceの観点からは、アクティビティの実行は API 呼び出しのペアであり、PollForActivityTask
タスクRespondActivityTaskCompleted
トークンを共有します。同じスレッド、プロセス、またはホストからの呼び出しについては、要件はありません。
デフォルトでは、 AWS Flow Frameworkはアクティビティを同期的に実行します。@ManualActivityCompletion
アノテーションを使用して、アクティビティ メソッドが返されたときにアクティビティが完了していないことを示します。このようなアクティビティは、 provided を使用して明示的に完了する (または失敗する) 必要がありますManualActivityCompletionClient
。
AWS Flow Framework 開発者ガイドからの例を次に示します。
@ManualActivityCompletion
public String getName() {
ActivityExecutionContext executionContext = contextProvider.getActivityExecutionContext();
String taskToken = executionContext.getTaskToken();
sendEmail("abc@xyz.com",
"Please provide a name for the greeting message and close task with token: " + taskToken);
return "This will not be returned to the caller";
}
public class CompleteActivityTask {
public void completeGetNameActivity(String taskToken) {
AmazonSimpleWorkflow swfClient = new AmazonSimpleWorkflowClient(…); //pass in user credentials
ManualActivityCompletionClientFactory manualCompletionClientFactory = new ManualActivityCompletionClientFactoryImpl(swfClient);
ManualActivityCompletionClient manualCompletionClient
= manualCompletionClientFactory.getClient(taskToken);
String result = "Hello World!";
manualCompletionClient.complete(result);
}
public void failGetNameActivity(String taskToken, Throwable failure) {
AmazonSimpleWorkflow swfClient
= new AmazonSimpleWorkflowClient(…); //pass in user credentials
ManualActivityCompletionClientFactory manualCompletionClientFactory
= new ManualActivityCompletionClientFactoryImpl(swfClient);
ManualActivityCompletionClient manualCompletionClient
= manualCompletionClientFactory.getClient(taskToken);
manualCompletionClient.fail(failure);
}
}
アクティビティが使用して実装されること@ManualActivityCompletion
は、実装の詳細です。ワークフロー コードは、同じインターフェイスを介してそれを呼び出し、同期的に実装されたアクティビティとは異なる方法で処理しません。