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

问题描述 投票:0回答:1

我有一个非常简单的队列,上面恰好有大量消息(按设计)。这里的堆可以是“数千”。

现在我正在尝试使用 Azure Web 作业和队列触发器来处理消息。效果很好。

不过我担心表现。假设我处理消息的方法需要 1 秒。有这么多消息,这一切加起来。

我知道我可以同时手动弹出多条消息,然后并行处理它们..但我不确定我们如何通过网络作业来做到这一点?

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

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

我在想 -> 创建 25 个任务并

await Task.WhenAll(tasks);

 处理我返回的所有数据。

那么,我有什么选择?

注意 #2:如果解决方案是横向扩展的..那么我还需要确保我的 Web 作业项目中只有

one 功能,对吧?否则,所有功能(读取:触发器等)也将所有被横向扩展。

c# azure azure-webjobs azure-queues
1个回答
3
投票
Azure WebJobs 的默认配置是并行处理 16 条消息,并且该数量是

可配置的。 WebJobs 框架在内部创建 16 个(或配置的 MaxDequeueCount

)函数副本并并行运行它们。 

此外,您可以

启动托管 WebJob 的 Azure 应用服务/网站的多个实例,即横向扩展,最多可达 20 个实例。但是,扩展实例(与上面的并行出队不同)会对定价产生影响,因此请检查这一点。

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

© www.soinside.com 2019 - 2024. All rights reserved.