1

Amazon SWF ワークフローのアクティビティ内から @Signal 関数を呼び出す方法はありますか。一部の処理が完了し、その処理のサブセットの子ワークフローを生成する必要があることをワークフローに通知できるようにしたいと考えています。これはどのように行われますか?

4

2 に答える 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 に答える