Skip to main content
 首页 » 编程设计

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

2024年04月18日40haluo1

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

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

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

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

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

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

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

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

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

请您参考如下方法:

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

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

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