我有一个非常简单的队列,恰好有大量的消息(按设计)。堆= = ..说......数千。
现在,我正在使用带有队列触发器的Azure Web作业来处理消息。工作正常。
我担心表现。让我们假设处理消息的方法需要1秒。有这么多消息,这一切都加起来。
我知道我可以同时手动POP多条消息,然后并行处理它们..但我不知道我们是如何使用网络工作做的呢?
我假设解决方案是扩展 out ??这意味着我将创建25个webjob实例?或者有更好的方法可以触发消息,但一次弹出25条左右的消息,然后自己将它们并行。
注意:大部分延迟是I / O(即对第三方的REST调用)。不是CPU。
我在思考 - >创建25个任务和await Task.WhenAll(tasks);
来处理我收到的所有数据。
那么 - 请问我有什么选择?
注意#2:如果解决方案是横向扩展..那么我还需要确保我的web作业项目中只有一个功能,对吧?否则所有函数(读取:触发器等)也将全部扩展。
答案 0 :(得分:3)
Azure WebJobs具有并行处理16条消息的默认配置,此数字为configurable。 WebJobs框架在内部创建函数的16个(或配置的MaxDequeueCount
)副本并并行运行它们。
此外,您可以launch multiple instances,(即横向扩展)托管WebJob的Azure App服务/网站,最多可包含20个实例。但是,扩展实例(与上面的并行Dequeue不同)会产生价格影响,所以请检查一下。
因此,从理论上讲,您可以在标准WebJob函数上单独配置并行处理24 * 20 = 480条消息,而无需任何自定义代码。