Amazon SWF ワークフローのアクティビティ内から @Signal 関数を呼び出す方法はありますか。一部の処理が完了し、その処理のサブセットの子ワークフローを生成する必要があることをワークフローに通知できるようにしたいと考えています。これはどのように行われますか?
質問する
1638 次
2 に答える
2
アクティビティの一部が完了したことをワークフローに伝えたいが、現在のアクティビティの実行を継続したいようです。この場合、アクティビティを2つの部分に分割し、最初の部分の結果を使用して、子ワークフローを生成する必要があるかどうかを判断することをお勧めします。フローフレームワークでは、アクティビティの途中でワークフローにシグナルを送信することはできないと思います。ただし、生のSWF APIを使用してシグナルを送信できます(この場合、パラメーターの1つとして「実行ID」をアクティビティに渡す必要があります)。
于 2012-12-01T02:57:06.777 に答える
1
生成されたワークフロー外部クライアントは、アクティビティ コード内からシグナルを送信するために使用する必要があります。ActivityExecutionContextには、初期化に必要なすべてのデータが含まれています。
public class MyActivitiesImpl implements MyActivities {
private final ActivityExecutionContextProvider contextProvider = new ActivityExecutionContextProviderImpl();
public void sendSignalBackActivity() {
ActivityExecutionContext context = contextProvider.getActivityExecutionContext();
AmazonSimpleWorkflow service = context.getService();
String domain = context.getDomain();
WorkflowExecution workflowExecution = context.getWorkflowExecution();
MyWorkflowClientExternalFactory factory = new MyWorkflowClientExternalFactoryImpl(service, domain);
GreeterClientExternal workflow = factory.getClient(workflowExecution);
workflow.signalMethod();
}
}
外部クライアントがSignalWorkflowExecution SWF API を呼び出すと、断続的な接続の問題が原因で失敗する可能性があります。そのため、アクティビティの実装は、そのような場合にスローされるAmazonServiceExceptionを(場合によっては再試行によって) キャッチして対処することを決定する場合があります。
于 2013-01-03T19:56:04.227 に答える