2017-10-13 5 views
0

SWF用Java Flow Frameworkの使用。AWS SWFアクティビティのスケジュール

SWFの特定の時間にアクティビティをスケジュールする方法はありますか? たとえば、2017年10月22日午前9:00に "sendNotification"を送信します。

これらの例では、指定した時間内ではなく、遅延のあるタイマーを作成できます。 現在のタイムスタンプとイベントが発生する必要があるターゲット時刻に基づいて遅延を計算することはできますが、現在のシステム時刻を取得しようとするとワークフロー実行中に現在の時刻を取得する方法はありますワークフロー決定者がワークフローにnon-determinismを作成し、失敗します。

Date currentDate = new Date(); 
    long sysTimeInSeconds = (currentDate.getTime()/1000); 
    System.out.println("System Time : " + sysTimeInSeconds); 
    Promise<Void> timer = clock.createTimer((timeStampInSeconds - sysTimeInSeconds)); 

[我々はシステムから現在の時刻を使用しているので、上記のコードが許可されていない]

ワークフロークロックの現在時刻は、私に役に立たないワークフローの開始時刻を返します。

どのように特定の時間にアクティビティをスケジュールすることができますか?

答えて

0

WorkflowClockを使用してください。それは、決定された再生の時間である正しい確定的な現在時刻を返します。

Here is the line of code現在の決定時間にクロックを更新します。

+0

マキシムちょっと、私はCron Decoratorsで装飾されたアクティビティがおそらくアクティビティをスケジュールする最良の方法だということを発見しました。 しかし、問題は、私がここのサンプル[https://github.com/aws/aws-swf-flow-library/blob/master/src/samples/AwsFlowFramework/src/com/amazonaws /services/simpleworkflow/flow/examples/cron/CronWorkflowImpl.java]を参照してください。ワークフロー決定者で、他にも多くのアクティビティがある場合、スケジューラのアクティビティはReplayの動作のために複数回スケジュールされます。決定者のこの活動が一度だけ予定されるようにする方法に関する提案はありますか? –

+0

リプレイ動作は、複数回のスケジューリングにつながるべきではありません。これが起こった場合、デコレータにはバグがあります。 –

関連する問題