2016-11-16 18 views
0

我想約6000的消息在Azure的功能Node.js的添加到我的Azure存儲隊列增加數千封郵件到Azure存儲隊列

我曾嘗試多種方式來做到這一點,現在我換一個PromiseQueueService method,並與約50使用Bluebird的併發解決通過Promise.map 6000個承諾。

const addMessages = Promise.map(messages, (msg) => { 
    //returns a promise wrapping the Azure QueueService method 
    return myQueueService.addMessage(msg); 
}, { concurrency: 50 }); 

//this returns a promise that resolves when all promises have resolved. 
//it rejects when one of the promises have rejected. 
addMessages.then((results) => { 
    console.log("SUCCESS"); 
}, (error) => { 
    console.log("ERROR"); 
}); 

我的QueueService是使用ExponentialRetry策略創建的。


我曾使用這種策略混合的結果:

  • 所有的信息被添加到我的隊列中,並承諾正確解析。
  • 所有郵件都會被添加到我的隊列中,並且承諾不會解決(或拒絕)。
  • 並非所有消息都會添加到我的隊列中,並且承諾不會解決(或拒絕)。

我缺少的東西或有可能是我的電話有時需要2分鐘解決,有時甚至超過10分鐘?在未來,我可能將不得不添加大約100,000條消息,所以我有點擔心我現在有不可預知的結果。

什麼是添加大量節點消息的最佳策略(在Azure的功能)


編輯:

不知道如何錯過了這一點,但一個相當可靠的方法來我的信息添加到我的存儲隊列是用隊列輸出我Azure的功能的結合:

https://docs.microsoft.com/en-us/azure/azure-functions/functions-bindings-storage-queue#storage-queue-output-binding

使我的代碼更容易!

for (var i = 0; i < messages.length; i++) { 
    // add each message to queue 
    context.bindings.outputQueue.push(messages[i]); 
} 

EDIT2:

我會在約1000批次分裂我的消息,並且這些批次存放在Azure的Blob存儲

每次添加新的blob時,都可以觸發另一個Azure函數,並且此函數一次處理1000條消息的排隊。

這應該使我的排隊更加可靠和可擴展,因爲我嘗試通過輸出綁定向我的隊列中添加20.000條消息,並在5分鐘後只能處理大約15.000條消息時收到Azure功能超時。

+0

我遇到同樣的問題。你最後的方法是否適合你?我喜歡這個想法,可能會嘗試。多線程的添加操作也是如此呢? –

回答

1

什麼觸發這個功能?我建議的是,不要讓單個函數添加所有這些消息,而是通過限制他們正在執行的工作量來扇出並允許這些函數進行擴展並更好地利用併發性。

由於我在上面提出,你將有一個函數來處理你今天已經到位的觸發器,這個工作將被另一個函數處理,這個函數執行實際上添加一個(很多)到隊列的消息數量較少。您可能需要使用這些數字來根據您的工作負載查看哪些工作正常,但是這種模式可以使這些功能更好地擴展(包括跨多臺機器),更好地處理故障並提高可靠性和可預測性。作爲一個例子,你可以在排隊的消息中有消息的數量來觸發工作,並且如果你想要1000條消息作爲最終輸出,你可以排隊10條消息,指示你的「worker」函數添加100條消息每個消息。我還建議每個功能使用更小的數字。

我希望這有助於!

+0

感謝您的快速和詳盡的答覆。我的功能目前是手動觸發的,但最終會定期觸發。 在我的函數中,我有這個數千條消息的列表。你如何建議擴展它以將它們添加到我的存儲隊列? 這聽起來像我需要一個隊列將我的消息添加到隊列...? – Schaemelhout

+0

我剛剛測試了我的功能,它能夠在05.00分鐘超時之前向我的隊列中添加15.000條消息... – Schaemelhout

+0

我仍然建議遵循上述方法。您最初觸發的函數會將適當的消息(具有任何所需的狀態)排隊,並且工作函數(使用工作隊列作爲觸發器)將處理這些消息。 –

相關問題