限制 Azure Function Cosmos DB 输出绑定中的请求

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

我正在构建一个 Azure 函数,该函数从服务总线检索增量更新,并应基于 Cosmos DB 中的文档创建/更新文档。

目前我仅使用输出绑定来实现此目的,但当队列中有大量更新时,即使是 20.000 RU/s,我也会遇到 429 错误。

看来我需要限制来自 Bus -> Azure Function -> Cosmos DB 的数据量。解决这个问题的“最佳实践”方法是什么?

我只能找到有关此主题的有限信息。

azure azure-functions azure-cosmosdb azure-servicebus-queues
2个回答
0
投票

在函数中执行此操作的最佳实践方法是将请求拆分为单个函数,这些函数执行由堆栈或队列(如 Azure 存储队列)触发的实际请求。您的主要功能只是填充队列,您可以通过控制并行执行。 host.json 设置

batchSize
.

错误处理可以通过毒队列本地实现。如果执行(出队)失败,例如抛出 429 超过 5 次,则消息将被移至有害队列。您可以通过host.json文件中的

maxDequeueCount
参数来控制数量。

要使用和集成此功能,为了避免 CosmosDB 上有太多请求,您可以调整批量大小、增加出队计数并使用或多或少复杂的模式,例如根据当前出队休眠一定时间数数。在 JS/TS 中可以使用

context.triggerMetadata.dequeueCount
访问计数。


-2
投票

限制问题“429 - 请求过多”错误可以使用 Azure Logic App 服务来解决。正如您所要求的最佳方法,这是一种可以以更少的努力解决您的问题的方法。

以下是使用 Logic App 时需要注意的一些要点:

  • 限制可以同时运行的逻辑应用实例的数量 时间。

  • 启用高吞吐量模式。

  • 禁用触发器中的数组分批(“拆分”)行为。

  • 将操作重构为更小的逻辑应用程序。

参考:处理 Azure 逻辑应用中的限制问题(429 -“请求过多”错误)

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