为什么 GCP Pub/Sub 发布消息两次?

Why does GCP Pub/Sub publish a message twice?

我有一个 Google 云函数订阅了一个主题。当云调度程序每 5 分钟调用 GCP Pub/Sub 时,我们的 GCP Pub/Sub 会向主题发布一条消息。问题是云函数有时会在调用第一个函数后的 90 秒后被调用两次。

订阅的确认截止日期为 600 秒。 所以,我想不通为什么 GCF 在 90 年代被 GCP Pub/Sub 调用了两次。 90 后调用两次有什么关系吗?

您的副本可以在发布端或订阅端。如果重复的消息具有不同的消息 ID,那么您的副本将在发布端生成。这可能是由于发布端为响应可重试错误而进行的重试造成的。如果消息具有相同的消息 ID,则重复在 Pub/Sub.

内的订阅端

云 Pub/Sub 提供 at-least-once 交付语义。这意味着可能会出现重复,即使您确认了该消息并且即使确认截止日期尚未过去。如果你想对交付有更强的保证,你可以在 Pub/Sub 中使用 Pub/Sub 的 exactly once feature, which is currently in public preview. However, this will require you to set up your Cloud Function with an HTTP trigger and to create a push subscription 指向函数的地址,因为没有办法设置 exactly once 设置Cloud Functions 创建的订阅。