Azure Functions CosmosDB 触发器输入批处理

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

我有一个 Azure 函数(隔离),带有 CosmosDB 触发器,用于侦听包含数千个文档的容器中的更改。

对文档的更改是由在计时器触发器上运行的另一个 Azure 函数进行的,该函数获取对 CRM 所做的更改并处理这些更改,并将必要的更改应用于 CosmosDB 文档。

大多数时候,我们只需在每个计时器周期处理 10-20 个更改,这意味着我们的 CosmosDB 触发函数接收 10-20 个输入项进行处理。这效果非常好并且不会引起任何问题。

但是,有时我们的业务需求需要在给定的计时器周期内处理 1000-2000 个更改。这意味着 CosmosDB Azure Function“每个实例”接收大约 100 个输入项。这会导致函数超时,因为执行时间超过了消耗计划的 10 分钟限制。

我知道我们可以切换到高级计划,但由于功能负载可变,这没有经济意义。

有没有办法配置从 CosmosDB 更改触发器接收到的由该函数的每个实例处理的文档数量限制?

例如:

  • 对 CosmosDB 文档进行了 1000 处更改
  • 当 CosmosDB 触发器检测到这些更改时,它将它们分散到多个执行中,以便每个实例仅处理 50 个文档。
azure azure-functions azure-cosmosdb
1个回答
0
投票

使用隔离模型,

CosmosDBTrigger
有一个
MaxItemsPerInvocation
属性,应该适合您(请参阅文档):

(可选)设置后,此属性设置每个函数调用接收的最大项目数。如果受监控容器中的操作是通过存储过程执行的,则在从更改源读取项目时会保留“事务范围”。因此,收到的项目数量可能高于指定值,因此同一事务更改的项目将作为一个原子批次的一部分返回。

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