2017-10-13 151 views
0

使用Java Flow Framework for SWF。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

嗨馬克西姆,我發現用克朗裝飾者裝飾的活動可能是安排活動的最佳方式。 但問題是,如果我使用這裏的示例中給出的東西[https://github.com/aws/aws-swf-flow-library/blob/master/src/samples/AwsFlowFramework/src/com/amazonaws /services/simpleworkflow/flow/examples/cron/CronWorkflowImpl.java]。然後在工作流決策程序中,如果我有許多其他活動,則由於重播行爲,調度程序活動將安排多次。有關如何確保此決策者的活動只安排一次的建議? –

+0

重播行爲不應該導致調度活動超過一次。顯然如果發生這種情況,Decorator中會有一個錯誤。 –