問題描述
Azure Function HTTP 觸發後, 230秒就超時,而其他方式觸發的Function, 執行5分鐘後也超時,如何調整超時時間?
問題分析
查閱官方文件,對函式應用超時持續時間有詳細介紹:最新的3.X版本的預設值根據Function計劃的型別不同而不同,預設的最少為5分鐘,最大30分鐘。消耗計劃的Function最大可調整為10分鐘,而其他兩種無限制。
但是,非常非常重要的一點是:如果Function是HTTP觸發型別。它的響應時間最大最大就是230秒。 這是因為 Azure 負載均衡器的預設空閒超時就是230秒,作為PaaS服務的Azure Funciton (相同的還有App Service)無法改動。
(Source : https://docs.microsoft.com/zh-cn/azure/azure-functions/functions-scale#function-app-timeout-duration)
問題解決
1) 進入Function App的Azure 門戶頁面: Function App - Microsoft Azure 由世紀互聯運營
2) 點選“App Service Editor “, 進入原始碼檢視頁面,選擇 host.json。 修改 functionTimeout 內容。如沒有 functionTimeout,則根據以下格式自行新增。
3)如果是 HTTP觸發的函式,而且其Function所執行的任務會處理很長時間,建議使用Function的另一種模式 【Durable Function 非同步模式】, 或者通過程式碼的方式,自行解決延遲響應返回。
Durable Function 非同步模式
非同步 HTTP API 模式解決了使用外部客戶端協調長時間執行的操作的狀態時出現的問題。 實現此模式的一種常用方式是讓 HTTP 終結點觸發長時間執行的操作。 然後,將客戶端重定向到某個狀態終結點(Location),客戶端可輪詢該終結點(Location),以瞭解操作是何時完成的。
Durable Functions 預設支援HTTP API 非同步模式,可以簡化甚至消除為了與長時間執行的函式執行進行互動而需要編寫的程式碼。
- C#程式碼可以參考:使用 C# 建立你的第一個持久函式(https://docs.microsoft.com/zh-cn/azure/azure-functions/durable/durable-functions-create-first-csharp?pivots=code-editor-vscode)
- JavaScript程式碼參考:使用 JavaScript 建立你的第一個持久函式(https://docs.microsoft.com/zh-cn/azure/azure-functions/durable/quickstart-js-vscode)
啟動例項後,該擴充套件會公開 Webhook HTTP API 用於查詢業務流程協調程式函式的狀態。
參考資料
函式應用超時持續時間: https://docs.microsoft.com/zh-cn/azure/azure-functions/functions-scale#function-app-timeout-duration
Function host.json functionTimeout : https://docs.microsoft.com/zh-cn/azure/azure-functions/functions-host-json#functiontimeout
Durable Function 非同步 HTTP API 模式: https://docs.microsoft.com/zh-cn/azure/azure-functions/durable/durable-functions-overview?tabs=csharp#pattern-3-async-http-apis
【完】