2013-04-06 63 views
5

以下是該場景。用戶上傳一個Excel文件,這會啓動驗證文件的工作流程,將其轉換爲幾個不同的文件,然後根據轉換對數據庫執行更新。上傳完成後,結果需要由團隊成員進行審查,然後才能繼續。使用計時器/信號允許人工干預AWS SWF工作流程

我使用Ruby和發現,信號和計時器在SWF實現這一目標的方式。然而,Ruby的例子是缺乏或不存在的,我需要一些幫助來理解如何使用Ruby。

Ny理解到目前爲止是計劃的一項計時器活動,基本上暫停流程,直到計時器到期(在這一點我可以取消工作流程或電子郵件的工作人員和設置另一個計時器)或信號發送到工作流程開始下一步。決策者會處理信號,然後開始適當的活動。

任何想法或方向其它來源,將不勝感激。

感謝, 托馬斯

回答

3

這有點難以提供的「答案」,給你並沒有真正問一個具體問題。我同意你的看法,使用定時器和信號就是你想要的。

不指定團隊如何被通知有關審覈。我假設你通過電子郵件通知他們,並指示他們訪問某個網站,他們可以查看更改,然後點擊指向批准或不批准的鏈接。點擊批准鏈接將向Web服務器發送一個請求,該請求將向SWF發送信號,表明該評論已被批准。點擊「不批准」鏈接會向SWF發出信號表明該評論尚未獲得批准。如果沒有人對審覈採取行動,您提到您要對團隊進行再審覈(或者升級爲經理)。假設這種再通過48小時後發生。復職後,你再批准他們72小時之前,不要批准。

這是你的工作流程的樣子對我說:

  1. 用戶上傳文件,並揭開序幕工作流程
  2. 決勝局任務計劃「TransformActivity」
  3. TransformActivity運行,轉換數據到不同的文件,成功完成
  4. Decider任務計劃「UpdateDatabaseActivity」
  5. UpdateDatabaseActivity運行,更新數據庫併成功完成
  6. 決勝局任務計劃「EmailTeamActivity」
  7. EmailTeamActivity運行,電子郵件的團隊,併成功完成
  8. 決勝局任務時間表48小時定時器。

如果指示批准或不批准的48小時內被接收到的信號:

  1. 決策器任務調度「RecordFinalDecisionActivity」
  2. RecordFinalDecisionActivity將運行,記錄批准(或不要批准)到數據庫中,併成功完成。
  3. 然後Decider Task會關閉工作流程,因爲它已完成。

如果沒有接收到信號和定時器觸發(48小時後):

  1. 決勝盤任務調度「EmailTeamAndManagerActivity」
  2. EmailTeamAndManagerActivity運行,電子郵件團隊和經理,併成功完成。
  3. 判定器任務安排另一個定時器72小時。

如果指示批准或不批准給出的72小時內被接收到的信號:

  1. 重複相同的邏輯部「。如果指示批准信號或不允許是在48小時內收到「。

如果沒有接收到信號且定時器火災(附加72小時後):

  1. 此時,工作流可以假定這是一個不允許,調度「RecordFinalDecisionActivity」並在活動完成後關閉工作流程。

您不希望進行「審查」活動的原因是因爲該任務被安排,然後一些活動工作人員需要回覆成功。這將如何工作?當有人點擊「批准」或「不批准」鏈接時,對網絡服務器的請求將不得不從任務列表中拉下活動。但是,如果任務列表具有多個活動,則SWF只會發出其中的任何一個。它可能沒有得到正確的。現在,你可以爭辯說,你可以在不同的任務列表中安排不同的評論,但這只是繁瑣而乏味。

信號是用來表示一個「外部」事件,這非常重要。 SWF documentation on Signals在談論信號方面做得很好。這是SWF documentation on how to use Timers and Signals。至於關於如何使用SWF和Ruby的細節,我無法真正幫助你。我只使用AWS Flow Framework將SWF與Java結合使用。

+0

感謝您的好解釋。 我認爲你設置的這些定時器是活動任務超時的副本。 爲了給一個exec發信號,你需要domain + workflowId,爲了響應一個activity,你只需要taskToken。 太糟糕了,當前的Ruby SDK不允許你只用taskToken(bit.ly/14QOIC8)實例化一個活動任務。 (對不起,我被寵壞了,我直接通過API工作)所以是的,你必須「下載」任務。 我還是比較喜歡活動。詢問執行官清楚地表明它有一個[審查]活動任務。 – jmettraux 2013-04-08 08:14:31

+0

是的...很好的解釋。我真的在尋找關於我的建議流程的評論,看看是否有其他方法可以實現。而且你已經確認這是要走的路。我一直在閱讀SDK源代碼,並且已經找到了如何獲得流程工作的基礎知識,並將其發佈到此處。再次感謝。 – 2013-04-08 21:50:25

1
  1. 用戶上傳excel文件,做「StartWorkflowExecution」,即排隊決策任務
  2. 決定工人通知流是新/「第一階段」,它的時間表「轉換文件」活動任務
  3. 活動工人拿起任務,並執行「轉換文件」活動,完成後做「RespondActivityTaskCompleted」與「完成轉換」的結果,即排隊決策任務
  4. 決定工人拿起十二月ision任務,告示轉換完成,並安排新的活動任務
  5. 活動工人拿起行動的任務,注意到它是一個團隊成員(根據調度活動任務時所決定的工人給出的說明),團隊成員得到通知,莫名其妙地執行他的行動,然後以某種方式通知活動工人將回復「RespondActivityTaskCompleted」

我沒有看到一個定時器或信號的需要,這只是普通的流動。如果您想要重複發生事件,超時和/或中斷流程,那麼這兩個概念很有用。

請注意,您可以通過任務列表區分活動工人(例如活動工人自動工作VS活動工人人類參與者,等等)。

+0

你掩蓋了#5中的活動工作者。如何分配,通知用戶,等待響應(可能需要幾天),然後回覆SWF?使用計時器和信號是正確的方法。 – alfredaday 2013-04-06 23:54:26

+0

該評論是一項活動。 – jmettraux 2013-04-07 02:54:15

+0

評論太久了,請在這裏查看:https://gist.github.com/anonymous/5328911 – jmettraux 2013-04-07 03:58:27