簡體   English   中英

父級完成后,子級工作流程會繼續運行嗎? (ChildPolicy.ABANDON)

[英]Will Child workflow continue to run after parent is finished? (ChildPolicy.ABANDON)

我想從一個工作流程(父流程)中觸發子工作流程。 基本上,這將在決策器中循環發生

@Workflow
@WorkflowRegistrationOptions(defaultExecutionStartToCloseTimeoutSeconds = 240,
              defaultTaskStartToCloseTimeoutSeconds = 60)
public interface W1{
    @Execute(version = "1.0")
    void fn();
}

public class W1Impl implements W1{
    ChildClientFactory factory = new ChildClientFactoryImpl();

    @Override
    public void fn() {
       int i;
      /*
          I'll call activity1 that returns me a list(size = n)
          I trigger n child worflows(Each takes the content in the list and operates)
      */
       for(i = 0; i < n; i++) {
          ChildClient childWorkflowClient = factory.getClient();
          childWorkflowClient.someMethod(params);//TRIGGERING CHILD WORKFLOW
      }
    }
}

父工作流程無需等待子工作流程完成。 也就是說,子工作流程將基於對它們的輸入進行一些處理,並將結果存儲在持久性存儲中。 因此,我不會從子工作流程中退回promise

注意:子工作流程的決策程序返回類型為void

ChildPolicy的選項WorkflowRegistrationOptions有權選擇ABANDON

從文檔:

棄權:Amazon SWF將不采取任何行動; 子執行將繼續執行。

問題:

  1. 當我沒有從子工作流程中返回任何Promise時,父工作流程會在觸發所有子工作流程之后完成嗎?

也就是說,在觸發n個子工作流程之后,父工作流程必須完成執行。 孩子將繼續奔跑。 (因為我已經指定了ChildPolicy.ABANDON )。 這個對嗎?

  1. 父級的defaultExecutionStartToClosetimeoutSeconds不需要考慮(包括)子級工作流的超時,對嗎?

3.子工作流程的觸發速率是否受到限制? (因為我從循環中觸發了工作流)

還有什么需要我照顧的嗎?

謝謝..

1)不行(已更新)。 請參見下面的Maxim答案2)如果您放棄它們,則子工作流的超時很重要。 您唯一需要擔心的(就超時而言)是父工作流將在有機會啟動所有子工作流之前超時。
3)如果您在短時間內撥打大量電話(我已經看到過這種情況),SWF可能會限制您的使用,但是文檔尚不清楚這意味着什么,以及持續的時間。 請參閱: http : //docs.aws.amazon.com/amazonswf/latest/developerguide/swf-dg-limits.html

我認為這不會完成。 當所有任務(包括活動和子工作流程)完成或失敗時,父工作流程將退出。 內部工作流在TryCatchFinally內部調用,並且僅在執行doFinally時完成。 它不依賴於子工作流返回任何結果及其子策略。 即使返回void,所生成的工作流客戶端仍會返回Promise <Void>,並且忽略此承諾不會改變行為。 添加workflowClient.detach方法以使父級與子級斷開連接應該非常簡單。 它將完成控制子工作流程完成的ExternalTask

恕我直言,我不會為分離客戶端而煩惱,因為在這種情況下,來自客戶端的任何錯誤都將被忽略。 保持連接狀態可確保如果子級由於任何原因而失敗,則父級會獲得例外。

至於開始率,我不會很在意。 更為重要的限制是單親父母可以生育的孩子數量。 由於需要返回整個工作流歷史記錄,因此,有太多孩子的每個決定都不是一個好主意。 我建議不要超過100。如果您需要更多,請創建工作流樹。 父母有100個孩子,每個孩子創建自己的100個孩子,就可以生出1萬個孩子。

可以使用生成的外部客戶端從活動啟動獨立的工作流程。 只要確保正確處理了可能出現的故障情況(如工作流程啟動,然后由於通信錯誤導致活動失敗)。 使用ActivityExecutionContext可以訪問對SWF端點的引用以及其他相關信息。

您似乎對啟動外部工作流程而不是子工作流程感興趣。 最佳實踐是從父工作流程中的活動開始工作流程。 這樣就不會創建層次結構。 同樣,當從決策者啟動工作流和活動時,速率是受控的(據我所知,它是每秒10個活動和4個子工作流,可以通過與swf團隊交談來增加速率)。 允許一些峰值,但是如果速率沒有下降,那么您將開始獲得rateexceededexception(不是吞吐量或限制)。 但是,如果您從一個活動開始就沒有這種問題,那么就等同於僅啟動新的工作流程。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM