繁体   English   中英

Cloud Firestore 触发器运行多次

[英]Cloud Firestore triggers run multiple times

在 Firestore 触发器的云函数文档中,它提到了以下限制:“事件至少传递一次,但单个事件可能导致多次 function 调用。避免依赖于一次性机制,并编写幂等函数。”

我正在编写一个检查数组长度的系统,当它达到一定长度(100)时,它被清除,并对数据进行一些处理。 我认为这就是“恰好一次”机制的含义。

我的问题是,正在检查:

if (change.after.data().array.length === change.before.data().array.length) {
  return;
}

防止多次处决的充分方法?

检查以下是否足以防止多次执行?

 if (change.after.data().array.length === change.before.data().array.length) { return; }

答案是不。 Cloud Function 可以在数组长度为 99 并且现在为 100 的情况下运行多次(=您提到的文档中提到的单个事件)。

有一篇关于构建幂等函数的博客文章解释了使云 Function 幂等的常用方法是“使用在 function 重试同一事件时保持不变的事件 ID”。

您可以使用此方法,通过在执行问题中提到的“数据处理”时保存事件 ID,如果有其他执行,请检查 ID 是否已保存。

具体来说,您可以使用 CF 事件 ID 作为 Document ID 创建一个 Firestore 文档,并在您的 Cloud Function 中,使用事务检查此文档是否存在。 如果它不存在,您可以继续:从未为此事件 ID 执行 CF。


对于您的情况,一个更简单的解决方案可能是确保如果 Cloud Function 多次执行,它会在数据方面产生完全相同的情况。

换句话说,如果“数据处理”的结果在 Cloud Function for array.length == 100运行多次时完全一样,那么你的 function 是幂等的(“当应用一个操作时,操作结果保持不变更多不止一次”)。

当然,这在很大程度上取决于您的“数据处理”的业务逻辑。 例如,如果它涉及执行时间,显然两次执行之间的最终结果可能不同。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM