2017-07-26 46 views
1

像標題描述 - 我有一個Azure功能的應用程序服務計劃,配置爲始終打開,並沒有functionTimeout設置在我的host.json,它似乎超時/不能在30分鐘到1小時之後完成(...但是我覺得這可能是一個誤報...)Azure功能永遠在線應用程序服務計劃超時沒有functionTimeout設置

HTTP觸發功能有時可能需要1-2個小時才能完成。我明白這可能不是最好的設計,根據Azure Function Best Practices我應該把它分解成更小/更易處理的部分 - 我明白了。不過,我期望App服務計劃的功能能夠像宣傳的那樣工作 - 對執行時間沒有硬性限制。也許這是與Unexpected azure-function timeouts on app-service-plan相同的問題,但是沒有答案,我正在使用HTTP觸發器。

當前,HTTP觸發方法直到工作完成纔會返回。 (這是一個問題 - 在HTTP觸發需要返回更快)

按照捻函數調用日誌,這種情況下報告「從未完成」,當我點擊切換輸出按鈕來查看日誌,他們。從來沒有進來

KUDO Invocation Details

當我在扳機的日誌部分認爲這一功能的運行,它似乎像函數只是停止,日誌流只是報告沒有新的跟蹤:

2017-07-26T16:36:43.116 [INFO] [Class1] Update operation started processing 790 sales records ... 2017-07-26T16:36:43.116 [DBUG] [Class2] Matching and updating ids from the map... 2017-07-26T16:38:07 No new trace in the past 1 min(s). 2017-07-26T16:39:07 No new trace in the past 2 min(s). 2017-07-26T16:40:07 No new trace in the past 3 min(s). 2017-07-26T16:41:07 No new trace in the past 4 min(s).

所以不知道爲什麼這個函數似乎停止了 - 或者它可能停止了收集日誌語句(有很多),並且由於某種原因,函數從未完成。

任何想法?

約時間: 2017-07-26T16:00:00 UTC InvocationID:(我認爲) d856c107-f1ee-455A-892B-ed970dcad128

如果確實正在超時,有什麼辦法讓我們知道,(例外?應用程序見解等)

+0

親愛的上帝,我覺得對於發起的HTTP請求...... –

+0

@JesseCarter我們只是使用HTTP觸發手動測試.. – flyte

+0

在最低限度的客戶端對不起HTTP觸發器應該將一個工作項放入一個隊列中以啓動另一個功能來執行實際的處理。您可以通過毒物隊列獲得自動重試和審覈的好處 –

回答

0

基於我的測試,我發現azure函數不會停止你的函數,如果你沒有設置超時。

這是我的測試,我創建了一個ManualTrigger函數,它將每隔10分鐘記錄消息。

像下面的代碼:

public static void Run(string input, TraceWriter log) 
{ 

     for (int i = 0; i < 100; i++) 
      { 

       log.Info("Worked " + i*10 + " minutes "); 
       Thread.Sleep(600000); 
      } 

} 

日誌詳細信息:

enter image description here

在日誌中,你會發現我的函數執行70 minutes.It依然很不錯。

沒有跟蹤意味着沒有新的請求發送到天青功能。

當前,HTTP觸發方法直到工作完成纔會返回。 (這是一個問題 - HTTP觸發器需要更快返回?)

正如Jesse Carter所說的,當你使用HTTP觸發方法時,你不能執行長時間的函數。

由於您的客戶端(發送請求)將有一個超時值。它將等待函數的響應。

通常,如果我們想要執行長時間的函數,我建議您可以使用http觸發器來獲取請求。在http觸發器函數中,您可以將隊列消息添加到azure存儲隊列。

然後你可以寫一個隊列觸發器函數來執行長時間的工作。

0

如果您的HTTP方法需要一分多鐘,您應該將其卸載到隊列中。期。 (我知道其他答案已經說過了,但值得重複)。

  1. Http連接是有限的資源。
  2. 雖然作爲執行引擎的Azure功能可以處理長時間運行的 操作(如隊列/服務總線支持所示),但http管道可能會切斷/超時長時間運行的請求。

隊列觸發器可以輕鬆運行30分鐘以上。如果你的工作比這更長,你應該把它分成多個隊列消息。

還檢查了耐用的功能支持:https://github.com/Azure/azure-functions-durable-extension/

相關問題