2016-11-16 15 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

我仍然建议遵循上述方法。您最初触发的函数会将适当的消息(具有任何所需的状态)排队,并且工作函数(使用工作队列作为触发器)将处理这些消息。 –

相关问题