2016-06-10 105 views
7

我知道webjob可以與webapp進行擴展,即如果我的webapp在5個實例上運行,那麼webjobs也會在5個實例上運行。 我只想知道在網站的每個實例中是否有多個webjob實例。如何擴展Azure Webjobs

注意:我最大的值爲JobHostConfiguration.QueuesConfiguration.BatchSize = 32已經。

現在,我的webapp運行在1個實例上。 Webjobs正在同時處理32個。 我的目標是同時處理3 * 32 = 96。

實現此目標的一種可能方式是可以部署相同的webjobs 3次(爲webJobName屬性設置不同的名稱),但我不確定這是否是一種好的做法。請給我指出適當的文件。

  1. 什麼config.Queues.NewBatchThreshold表示?

  2. config.Queues.NewBatchThreshold的默認值是多少?

  3. 對於隊列處理應該推薦什麼值config.Queues.NewBatchThreshold

回答

6

https://github.com/Azure/azure-webjobs-sdk/issues/628複製喬恩的回答是:

的NewBatchThreshold是已經離開的消息的數量在批量處理SDK刷新批次之前。

例如,如果批量大小爲20,NewBatchThreshold爲5,則SDK將每次從隊列中抓取20條消息,將它們傳遞給您的代碼以供您逐一處理它們,然後當它到達過去5個未處理的郵件(這樣你就已經處理15)會搶在「並行執行」

默認情況下,NewBatchThreshold是BATCHSIZE(see source code)的一半這就是爲什麼你看到的價值在未來20 See here 0表示批量大小爲1.

請注意,我們希望使這一點不那麼令人困惑,根據this issue我只是打開。

+1

第一個問題呢?如果我的業務需要處理超過32個,是否有任何方法可以在單個實例中處理更多?如何同時運行96或更多。尋找描述縮放最佳實踐的一些很好的文檔 –

+0

並行運行的作業的最大數目最終爲'NewBatchThreshold + BatchSize'。所以通過將'NewBatchThreshold'設置爲更高的數字,就可以實現這一點。 –

+0

@ArifulHaque我認爲縮放的最佳實踐是擁有超過1個webjob(網站)實例......強制實施單個實例的約束可能違反了最佳實踐。在任何情況下,如果您實現了多個執行相同操作的隊列觸發函數,則可能可以實現BatchSize> 32。 – Matt