1

最近我遇到一个问题,我的CosmosDBTrigger Azure Function只会在重启时捕获我的最后一条更新记录,或者如果在重启期间有文档更改,有时甚至没有机会触发重启

函数 1用于通过HttpTrigger从集合中更新我的商品(A、B 和 C)价格。

函数 2将跟踪更新事件,并通过CosmosDBTrigger将它们记录到数据库中,当然还有租赁文档。

如果我的功能 2停止,而在重新启动期间,我的功能 1有 3 次 Http 调用,它们更新了我的几个项目的总价格 3 次,例如

A price $1 --(1st update)--> $2 --(2nd update)--> $3 --(3rd update)--> $4
B price $2 --(1st update)--> $4 --(2nd update)--> $6 --(3rd update)--> $8
C price $3 --(1st update)--> $6 --(2nd update)--> $9 --(3rd update)--> $12

在我的Function 2重新启动后,我发现了两个问题:

  1. 有时我的函数 2不会触发,这意味着它丢失了所有更新,并且它随机发生......(我假设租约集合将存储每个数据库更新的检查点,而 CosmosDBTrigger 将查看每个检查点的租约文档以重新捕获上次它停止,对吗?)
  2. 每当我的功能 2能够在重新启动后触发时,我认为它能够捕获我对项目 A、B 和 C 的所有 3 次更新,但是它没有捕获我的前 2 次更新,而只捕获了最后一次更新是
A price $4
B price $8
C price $12

对于 No.1,为什么 CosmosDBTrigger有时可以捕获我之前的更改但有时会失败?我们真的很担心这一点,因为首先它是随机发生的,其次我们可能会由于无法解释的原因丢失我们的数据......

是否有任何时间段可以临时存储更新,例如 30 秒、60 秒?或者租约集合会覆盖我之前在检查点的更新吗?那么在lease collection里面,每个item代表什么?

对于 No.2,这种情况是设计使然,还是我做错了什么,或者任何设置都可以帮助我跟踪/保留所有更新更改(在历史记录中),以便稍后我可以捕获所有更新然后通过CosmosDBTrigger函数?

4

0 回答 0