我想約6000的消息在Azure的功能與Node.js的添加到我的Azure存儲隊列。增加數千封郵件到Azure存儲隊列
我曾嘗試多種方式來做到這一點,現在我換一個Promise
的 QueueService 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的功能的結合:
使我的代碼更容易!
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功能超時。
我遇到同樣的問題。你最後的方法是否適合你?我喜歡這個想法,可能會嘗試。多線程的添加操作也是如此呢? –