如何使用 WebJob 处理 Azure 队列上的大量消息?

How to process lots of messages on an Azure Queue with a WebJob?

我有一个非常简单的队列,上面恰好有成堆的消息(按设计)。堆 == .. 说 ... 成千上万。

现在我正在尝试使用带有队列触发器的 Azure Web 作业来处理消息。工作正常。

虽然我担心性能。假设我处理消息的方法需要 1 秒。有这么多的消息,这一切加起来。

我知道我可以同时手动 POP 多条消息,然后并行处理它们..但我不确定我们如何使用 Web 作业做到这一点?

假设解决方案是扩展out??这意味着我会创建 25 个 webjob 实例?或者有没有更好的方法,我可以触发一条消息,但一次弹出 25 条左右的消息,然后自己将它们并行化。

注意:大部分延迟是 I/O(即对第 3 方的 REST 调用)。不是 CPU.

我在考虑 -> 创建 25 个任务并 await Task.WhenAll(tasks); 处理我返回的所有数据。

那么 - 请问我有什么选择?

注意 #2:如果解决方案是横向扩展的……那么我还需要确保我的 Web 作业项目中只有 one 函数,对吗?否则 所有 功能(阅读:触发器等)也将 所有 扩展。

A​​zure WebJobs 的默认配置是并行处理 16 条消息,这个数字是 configurable。 WebJobs 框架在内部创建您的函数的 16 个(或配置的 MaxDequeueCount)个副本并并行运行它们。

此外,您可以 launch multiple instances, 即横向扩展托管 WebJob 的 Azure 应用程序 Service/Website,最多 20 个实例。但是,扩展实例(与上面的并行出列不同)会对定价产生影响,因此请检查一下。

因此,理论上您可以通过在标准 WebJob 函数上单独配置来并行处理 24*20 = 480 条消息,而无需任何自定义代码。