1

我每分钟都使用 cloud scheduler 触发一个云功能[* * * * *]

Stackdriver 日志表明该函数似乎已被触发并在同一分钟内运行两次。这可能吗?

PubSub 承诺至少交付一次,但我认为 GCP 会自动处理调度程序 -> 函数工作流的重复触发器。

防止此功能每分钟运行一次以上的好模式是什么?

4

1 回答 1

6

您的函数需要被设为“幂等”,以确保一条消息只被处理一次。换句话说,您必须在某处(可能是数据库)维护消息已成功处理的状态,并检查该状态以确保消息不会被处理两次。

所有非 HTTP 类型的云函数在提供给函数调用的上下文参数中提供唯一的事件 ID。如果您看到重复事件 ID,则意味着您的函数正在为同一消息再次调用,无论出于何种原因。

这种对幂等性的需求并不是 pubsub 或云调度程序所独有的。这是所有非 HTTP 类型的后台函数的关注点。

关于编写幂等函数的完整讨论对于 Stack Overflow 的回答有点过分,但Google Cloud 博客中有一篇文章很好地涵盖了这个问题。

另请参阅:具有幂等性的云函数和 Firebase Firestore

于 2019-11-21T21:14:48.660 回答