我每分钟都使用 cloud scheduler 触发一个云功能[* * * * *]
。
Stackdriver 日志表明该函数似乎已被触发并在同一分钟内运行两次。这可能吗?
PubSub 承诺至少交付一次,但我认为 GCP 会自动处理调度程序 -> 函数工作流的重复触发器。
防止此功能每分钟运行一次以上的好模式是什么?
我每分钟都使用 cloud scheduler 触发一个云功能[* * * * *]
。
Stackdriver 日志表明该函数似乎已被触发并在同一分钟内运行两次。这可能吗?
PubSub 承诺至少交付一次,但我认为 GCP 会自动处理调度程序 -> 函数工作流的重复触发器。
防止此功能每分钟运行一次以上的好模式是什么?
您的函数需要被设为“幂等”,以确保一条消息只被处理一次。换句话说,您必须在某处(可能是数据库)维护消息已成功处理的状态,并检查该状态以确保消息不会被处理两次。
所有非 HTTP 类型的云函数在提供给函数调用的上下文参数中提供唯一的事件 ID。如果您看到重复事件 ID,则意味着您的函数正在为同一消息再次调用,无论出于何种原因。
这种对幂等性的需求并不是 pubsub 或云调度程序所独有的。这是所有非 HTTP 类型的后台函数的关注点。
关于编写幂等函数的完整讨论对于 Stack Overflow 的回答有点过分,但Google Cloud 博客中有一篇文章很好地涵盖了这个问题。