任務平行執行同步與「全部等待」迴圈 - n8n 工作流程

利用 n8n Webhook 並行觸發多個非同步子流程,並透過穩健的 n8n 節點迴圈模式,同步等待所有任務完成。最適合需要長時間運行的處理程序。

工作流預覽

準備好自動化了嗎?

下載此 n8n 工作流程範本並立即開始使用。

適用對象

需要深入 n8n 內部同時執行長時間任務的自動化開發人員。
尋找用於穩健流程控制和同步的進階 n8n 範本的使用者。
使用 n8n 建立可靠、可擴展的後端處理流程的技術團隊。
任何需要在分散的 n8n 流程執行中實作「全部等待」邏輯的人員。

總覽

這個進階 n8n 流程示範了一個管理非同步、平行任務執行的關鍵設計模式。當你有一批需要耗費大量處理時間的項目(例如:報表生成、大量資料轉換)時,依序處理效率太差了。此專用的 n8n 流程模式採用了父子結構,父流程會同時透過 Webhook 呼叫啟動多個獨立的子流程,然後進入一個精密的等待迴圈,其核心是 Webhook Callback Wait n8n 節點。這確保了父流程必須在收到所有已啟動子流程的確認(透過回復 Webhook 回呼)後,才能繼續往下執行。這個 n8n 流程範本對於在 n8n 內建構高併發且高韌性的自動化系統來說,是不可或缺的。

運作方式


  1. 觸發與初始化: 主 n8n 流程透過手動 n8n 觸發啟動。它使用一個 Code n8n 節點來模擬需要平行處理的多筆資料項目。一個 Set n8n 節點會初始化關鍵的狀態變數 finishedSet(一個空陣列),用於追蹤已完成的任務。

  2. 平行派發: Split In Batches n8n 節點會迭代模擬的項目。針對每一項,一個 HTTP Request n8n 節點會呼叫獨立子流程執行的 Webhook 端點,並將項目 ID,以及最關鍵的,父流程的唯一回復網址 ($execution.resumeUrl) 作為回呼標頭傳送過去。

  3. 子流程執行: 子 n8n 流程(獨立運行)透過其 Webhook n8n 觸發接收請求,會立即回應以防止父流程的 HTTP Request 阻塞,然後模擬所需的處理時間。

  4. 回呼與回復: 子任務完成後,它會使用一個 HTTP Request n8n 節點去呼叫父流程特定的回復 Webhook 位址(從 callbackurl 標頭取得),藉此發出完成訊號並傳遞已完成的項目 ID。

  5. 同步迴圈(父流程): 父 n8n 流程的流轉由一個迴圈控制:它會檢查 If All Finished 條件。如果同步尚未完成,它會停在指定的 Webhook Callback Wait n8n 節點。當收到子流程的回呼回復後,一個 Code n8n 節點會用新完成的項目 ID 來更新 finishedSet 陣列。接著流程會迴圈回到 If All Finished 節點重新檢查計數。

  6. 完成: 只有當 finishedSet 中的項目數量與最初派發的總項目數量相符時,父 n8n 流程才會繼續執行到最後一步。

安裝指南


  1. 匯入: 將這整個 n8n 流程 JSON 匯入到您的 n8n 實例中。

  2. 分離子流程: 規劃用於子執行的節點(從路徑為 parallel-subworkflow-target 的標記為 'Webhook' 的 Webhook 節點及其後續節點開始)必須複製並貼上到一個獨立的新 n8n 流程中。請啟用此子流程。

  3. 環境設定: 為了讓父 n8n 流程能啟動子流程,您必須在 n8n 實例的設定中配置 WEBHOOK_URL 環境變數。此 URL 必須是能對外存取子流程公開 Webhook 端點的基礎網址。如果是自行架設,請確保其指向正確的內部服務或網域。

  4. 啟用: 啟用父流程與子流程的 n8n 範本,以確保 Webhook 端點都已啟用。

  5. 執行: 手動執行父 n8n 流程,觀察其平行派發與同步等待的模式。

節點詳情

手動觸發: 點擊「測試流程」時。作為啟動父流程執行的初始 n8n 觸發器。
Code 節點: 模擬用於平行處理的多個項目。生成一個包含三個項目(requestIds)的陣列,用以模擬需要平行執行的任務。
Split In Batches 節點: 迭代各個項目。負責管理迭代,確保 HTTP Request n8n 節點針對每個項目都會執行。
Set 節點: 初始化 finishedSet。建立初始狀態變數 finishedSet 作為空陣列,這對於追蹤 n8n 流程中的同步狀態至關重要。
HTTP Request 節點: 透過 Webhook 啟動子流程。這個 n8n 節點會啟動平行子流程的執行。關鍵設定:在 callbackurl 標頭中傳遞父流程獨有的 $execution.resumeUrl
If 節點: 如果全部完成。這個核心同步 n8n 節點會檢查已完成項目的數量是否等於原始項目數量,以控制流程是暫停還是繼續。
Wait 節點: Webhook Callback Wait(Webhook 回呼等待)。會暫停父 n8n 流程的執行,直到一個特定的外部 Webhook 呼叫命中其專屬的回復端點為止。這充當了同步的屏障。
Code 節點: 更新 finishedSet。流程回復後,這個 n8n 節點會使用 JavaScript 安全地更新並附加來自 Webhook 資料包中新完成的 finishedItemIdfinishedSet 陣列中追蹤的狀態。
Webhook 節點(子流程): 作為平行任務執行實例的外部 n8n 觸發器(parallel-subworkflow-target)。
HTTP Request 節點(子流程): 呼叫父流程回復。透過呼叫父流程的回復網址來執行關鍵的回呼動作。它使用重試設定(retryOnFail: truewaitBetweenTries: 3000ms),以緩解多個子任務同時完成並嘗試回復父 n8n 流程時可能發生的競速條件(Race Condition)。

相關 n8n 工作流程

免費

節點: 11 節點
更新时间: 2025年12月26日
建立者
Hubschrauber
Hubschrauber

Software developer specializing in "back-end plumbing" to connect and sync data between large corporate systems, enabling application distribution/migration, scaling, and containerization. Using n8n for various orchestration tasks both at home and "on the job."

精選*