我有一個調用虛擬機上託管的Web服務的Azure函數。由於這種依賴關係,Azure功能最多不得超過8個實例同時運行(虛擬機只有8個內核,並且每個Web服務調用使用一個內核)。如果產生8個以上的實例,則Web服務調用將開始備份,觸發Azure功能的隊列中的項目將開始超時,並且消息將被丟棄。不過,我也希望儘可能多地利用可用資源來最大限度地處理隊列,所以我希望總是有8個Azure函數在隊列中有8個或更多項時運行。Azure函數host.json Queue batchSize小於newBatchThreshold
爲了達到所要求的限制,我設置了Azure的功能,計劃在一個應用程序服務的計劃,而不是一個消費計劃運行,我在host.json爲Azure的功能服務中設置以下值:
{
"queues": {
"batchSize": 1,
"newBatchThreshold": 7
}
}
理論上這樣做只要7個或更少的函數實例正在運行,那麼將有1個更多的消息出隊,直到有8個消息被處理。我現在有這個運行,它似乎正在工作,但我找不到host.json文檔或WebJobs SDK documentation中的任何地方,它說明batchSize
是否可以小於newBatchThreshold
。我只知道newBatchThreshold
的建議是batchSize
的一半(這顯然不是我所做的)。
我的問題是:這個配置好嗎?還是有更好的方法來完成我的節流目標?
感謝您的確認。我知道,通過消費Azure功能,它最終可以擴展到多個實例,每個實例都有自己的限制。這就是爲什麼我選擇使用應用服務計劃的原因,因此它僅限於一個實例。但是我不知道'WEBSITE_MAX_DYNAMIC_APPLICATION_SCALE_OUT'配置設置,所以謝謝你的提示! – sam2929
@DavidEbbo'batchSize'確實讓我感到困惑。我認爲這是每個實例最大並行執行的上限,因此對於值1,我不希望任何並行實例正在運行。我認爲'newBatchThreshold'會觸發預取,而不是立即運行。我想我把它與Service Bus搞混了。 – Mikhail
@Mikhail是的,它是超級混亂。只要當前正在執行的計數小於閾值,它就會不斷抓取新的批次 –