我正在构建一个 Azure 函数,该函数从服务总线检索增量更新,并应基于 Cosmos DB 中的文档创建/更新文档。
目前我仅使用输出绑定来实现此目的,但当队列中有大量更新时,即使是 20.000 RU/s,我也会遇到 429 错误。
看来我需要限制来自 Bus -> Azure Function -> Cosmos DB 的数据量。解决这个问题的“最佳实践”方法是什么?
我只能找到有关此主题的有限信息。
在函数中执行此操作的最佳实践方法是将请求拆分为单个函数,这些函数执行由堆栈或队列(如 Azure 存储队列)触发的实际请求。您的主要功能只是填充队列,您可以通过控制并行执行。 host.json 设置
batchSize
.
错误处理可以通过毒队列本地实现。如果执行(出队)失败,例如抛出 429 超过 5 次,则消息将被移至有害队列。您可以通过host.json文件中的
maxDequeueCount
参数来控制数量。
要使用和集成此功能,为了避免 CosmosDB 上有太多请求,您可以调整批量大小、增加出队计数并使用或多或少复杂的模式,例如根据当前出队休眠一定时间数数。在 JS/TS 中可以使用
context.triggerMetadata.dequeueCount
访问计数。
限制问题“429 - 请求过多”错误可以使用 Azure Logic App 服务来解决。正如您所要求的最佳方法,这是一种可以以更少的努力解决您的问题的方法。
以下是使用 Logic App 时需要注意的一些要点:
限制可以同时运行的逻辑应用实例的数量 时间。
启用高吞吐量模式。
禁用触发器中的数组分批(“拆分”)行为。
将操作重构为更小的逻辑应用程序。