如何防止云调度程序多次触发功能?

时间:2019-11-21 21:03:31

标签: google-cloud-functions google-cloud-pubsub google-cloud-scheduler

我每分钟都会通过云调度程序[* * * * *]触发云功能。

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

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

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

1 个答案:

答案 0 :(得分:2)

您的函数必须为made "idempotent",以确保消息仅被处理一次。换句话说,您必须在某处(可能是数据库)维护消息已成功处理的状态,并检查该状态以确保消息不会被两次处理。

所有非HTTP类型的Cloud Functions在提供给函数调用的context parameter中提供唯一的事件ID。如果您看到重复的事件ID,则表示无论出于何种原因,都针对同一条消息再次调用您的函数。

对幂等的需求并不是pubsub或cloud调度程序所独有的。所有非HTTP类型的后台函数都需要考虑这一点。

关于编写幂等函数的完整讨论太多了关于堆栈溢出的答案,但是有一个post in the Google Cloud blog很好地涵盖了这个问题。

另请参阅:Cloud functions and Firebase Firestore with Idempotency