问题描述
据我所知(例如来自 here),Cosmos DB 更改源不能保证每次更新都会触发一个事件。例如,当对同一文档的两次更新几乎同时发生时,可能会发生更改源处理器(例如,侦听更改源的 Azure 函数)仅触发一次,即两次更新中的较晚者。首先,我的理解是否正确?如果是:
解决方法
更改提要基于轮询而不是基于事件,因此取决于您使用增量模型轮询更改的频率。
处理器只跟踪它在每个分区读取的最高 LSN,并从该书签点开始请求下一批更改(按 LSN 顺序)。
每次更新文档时,其关联的 LSN 都会增加,因此,为了在更改提要中返回特定版本,更改提要处理器需要在更新文档之前请求包含该 LSN 的批次。
对于 Azure 函数,您可以减少 feedPollDelay
以减少错过更改的可能性
(可选)轮询 a 之间的延迟时间(以毫秒为单位) 在所有当前更改完成之后,对提要上的新更改进行分区 倒掉。默认值为 5,000 毫秒,即 5 秒。
如果您的更改非常接近,您可能仍然会错过它们。有一个“full fidlelity change feed”选项会在某个时候返回所有更改,但我不确定如何进入预览版或何时正式发布并与 Azure 功能集成。