如何使用 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 函数,对吗?否则 所有 功能(阅读:触发器等)也将 所有 扩展。
Azure WebJobs 的默认配置是并行处理 16 条消息,这个数字是 configurable。 WebJobs 框架在内部创建您的函数的 16 个(或配置的 MaxDequeueCount
)个副本并并行运行它们。
此外,您可以 launch multiple instances, 即横向扩展托管 WebJob 的 Azure 应用程序 Service/Website,最多 20 个实例。但是,扩展实例(与上面的并行出列不同)会对定价产生影响,因此请检查一下。
因此,理论上您可以通过在标准 WebJob 函数上单独配置来并行处理 24*20 = 480 条消息,而无需任何自定义代码。
我有一个非常简单的队列,上面恰好有成堆的消息(按设计)。堆 == .. 说 ... 成千上万。
现在我正在尝试使用带有队列触发器的 Azure Web 作业来处理消息。工作正常。
虽然我担心性能。假设我处理消息的方法需要 1 秒。有这么多的消息,这一切加起来。
我知道我可以同时手动 POP 多条消息,然后并行处理它们..但我不确定我们如何使用 Web 作业做到这一点?
我假设解决方案是扩展out??这意味着我会创建 25 个 webjob 实例?或者有没有更好的方法,我可以触发一条消息,但一次弹出 25 条左右的消息,然后自己将它们并行化。
注意:大部分延迟是 I/O(即对第 3 方的 REST 调用)。不是 CPU.
我在考虑 -> 创建 25 个任务并 await Task.WhenAll(tasks);
处理我返回的所有数据。
那么 - 请问我有什么选择?
注意 #2:如果解决方案是横向扩展的……那么我还需要确保我的 Web 作业项目中只有 one 函数,对吗?否则 所有 功能(阅读:触发器等)也将 所有 扩展。
Azure WebJobs 的默认配置是并行处理 16 条消息,这个数字是 configurable。 WebJobs 框架在内部创建您的函数的 16 个(或配置的 MaxDequeueCount
)个副本并并行运行它们。
此外,您可以 launch multiple instances, 即横向扩展托管 WebJob 的 Azure 应用程序 Service/Website,最多 20 个实例。但是,扩展实例(与上面的并行出列不同)会对定价产生影响,因此请检查一下。
因此,理论上您可以通过在标准 WebJob 函数上单独配置来并行处理 24*20 = 480 条消息,而无需任何自定义代码。