簡體   English   中英

如何使用 Azure 數據工廠執行長時間運行的持久 Azure 函數?

[英]How to execute long running durable Azure Functions with Azure Data Factory?

我的問題:

  1. 我有 Azure 數據工廠 (ADF) 使用 HTTP 觸發器調用 Azure 函數 (Python)。
  2. ADF通過json向Function提供參數。
  3. Function 處理超過230秒超時
  4. Azure 工廠獲取超時錯誤:

解決思路:

問題? A) 如果 ADF 調用 HTTP 啟動器最大 230 超時發生? 或者這沒有最大時間限制? B) 如何使 Durable Function 返回值給 ADF。 (接下來我將請求下一次 ADF 活動的完整狀態)

根據Microsoft 官方文檔無論您在設置中配置的functionTimeout設置如何,Azure Functions 都會在 230 秒后超時。 解決方案是使用 Durable Functions 使其成為后台工作。

持久函數與普通 Azure 函數在同一平台上運行,但它們異步運行。 當您觸發 Durable Function 時,它會創建一個后台進程並為您提供一些可以與該進程交互的 URL; 包括一個查詢其狀態。 當您調用它時,它會返回后台作業的狀態以及完成時的數據。

這個想法是通過 HTTP 端點觸發一個 Durable Function,等待它完成然后得到結果。 它是這樣的:

在此處輸入圖像描述

下面是它在 Until 活動中的樣子:

在此處輸入圖像描述

請按照以下步驟操作:

  1. 首先,我們使用 Azure Function 活動通過 HTTP 觸發器觸發我們的持久 Function。

  2. 然后通過 Until 活動,我們檢查 function 的狀態。

    • Wait 活動等待大約 30 秒(或不同,取決於您)讓 function 被執行

    • Web 活動通過調用@activity('StartUntar').output.statusQueryGetUri向 Azure Function 活動返回的 statusQueryUrl 發出請求

  3. Until activity 用表達式檢查 CheckStatus Web activity 的結果@not(or(equals(activity('CheckStatus').output.runtimeStatus, 'Pending'), equals(activity('CheckStatus').output.runtimeStatus, 'Running' )))

  4. 它會重復,直到 function 完成或失敗,或者直到超時(在 Timeout 屬性上設置)。

我建議您在 ADF 中使用Webhook 活動,並讓持久的 function 在完成(成功或失敗)后執行回調 URI。 在 ADF 中,這應該比長時間循環更便宜。

暫無
暫無

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

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