我有一个 Azure 函数(隔离),带有 CosmosDB 触发器,用于侦听包含数千个文档的容器中的更改。
对文档的更改是由在计时器触发器上运行的另一个 Azure 函数进行的,该函数获取对 CRM 所做的更改并处理这些更改,并将必要的更改应用于 CosmosDB 文档。
大多数时候,我们只需在每个计时器周期处理 10-20 个更改,这意味着我们的 CosmosDB 触发函数接收 10-20 个输入项进行处理。这效果非常好并且不会引起任何问题。
但是,有时我们的业务需求需要在给定的计时器周期内处理 1000-2000 个更改。这意味着 CosmosDB Azure Function“每个实例”接收大约 100 个输入项。这会导致函数超时,因为执行时间超过了消耗计划的 10 分钟限制。
我知道我们可以切换到高级计划,但由于功能负载可变,这没有经济意义。
有没有办法配置从 CosmosDB 更改触发器接收到的由该函数的每个实例处理的文档数量限制?
例如:
使用隔离模型,
CosmosDBTrigger
有一个MaxItemsPerInvocation
属性,应该适合您(请参阅文档):
(可选)设置后,此属性设置每个函数调用接收的最大项目数。如果受监控容器中的操作是通过存储过程执行的,则在从更改源读取项目时会保留“事务范围”。因此,收到的项目数量可能高于指定值,因此同一事务更改的项目将作为一个原子批次的一部分返回。