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

问题描述 投票:0回答:2

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

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

google-cloud-platform google-cloud-pubsub
2个回答
2
投票

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

Cloud Pub/Sub 提供至少一次交付语义。这意味着即使您确认了该消息并且确认截止日期尚未过去,也可能会发生重复。如果您希望在交付方面有更强的保证,您可以使用 Pub/Sub 的 仅一次功能,该功能目前处于公共预览版。但是,这将要求您使用 HTTP 触发器 设置您的云函数,并在 Pub/Sub 中创建一个指向函数地址的 推送订阅,因为无法设置精确一次设置由 Cloud Functions 创建的订阅。


0
投票

在我的例子中,pubsub 函数被多次调用,因为在部署函数时,多个作业被安排在不同的区域 - 一个用于 us-central1,一个用于 europe-west1。我不知道为什么,但我通过删除 europe-west1 作业并使用区域参数重新部署该函数解决了这个问题。

查看预定作业列表:

  1. 打开 Google Cloud 仪表板并搜索 Cloud Scheduler
  2. 您应该看到包含主题和区域的职位列表

要强制将函数部署到正确的区域,您可以向云函数添加参数,如下所示:

exports.scheduledCallback = functions.region('us-central1').pubsub.schedule('0,30 * * * *').onRun(async (context) => {
...
© www.soinside.com 2019 - 2024. All rights reserved.