我想约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功能超时。
我遇到同样的问题。你最后的方法是否适合你?我喜欢这个想法,可能会尝试。多线程的添加操作也是如此呢? –