GCP Pub/Sub 的重试次数多于配置的次数

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

我有一个正在触发 Cloud Function 的 Pub/Sub 推送订阅。有启用指数退避和死信的重试策略。

接下来是配置:

  • 确认期限为 60 秒
  • 一旦启用交付
  • 最大投递尝试次数为 5 次
  • 最小退避 - 30 秒,最大退避 - 600 秒

出于测试目的,我将 Cloud Function 配置为始终返回 500 错误代码。但死信主题中没有 5 次重试和 1 个事件,而是:

  • 死信主题中的 6 次重试和 2 个事件
  • 死信主题中的 7 次重试和 3 个事件
  • 死信主题中的 10 次重试和 6 个事件

我可以假设死信主题收到了更多事件,因为重试次数比预期要多。但我不明白为什么重试次数比配置的次数多?

google-cloud-platform google-cloud-functions google-cloud-pubsub dead-letter
2个回答
0
投票

Pub/Sub 有一个内置的“至少一次”传送系统,它将重试未确认的消息。在这种情况下,经过 600 秒后,您第一次发送的消息将变为未确认状态,因此 Pub/Sub 会重试该消息。它将持续重试 600 秒,直到达到 messageRetentionDuration 或您确认为止。


0
投票

在我的情况下,产生了相同的行为。第五次重试传递失败后,订阅会将事件发布到死信。在随后的重试中,将向死信主题进行新的发布,直到订阅的消息保留持续时间结束,或者直到我们从订阅中清除消息。

要解决此问题,您需要将发布者和订阅者角色授予包含订阅的项目的 pub/sub 服务帐户(

pubsub.topics.getIamPolicy

pubsub.subscriptions.getIamPolicy)。 一旦正确配置,应遵守最大重试次数。

有关更多信息,请参阅以下发布/订阅文档:

https://cloud.google.com/pubsub/docs/handling-failures#dead_letter_topic

具体来说:Pub/Sub 仅在正确配置死信主题并包含正确的 IAM 权限时才计算传输尝试。

© www.soinside.com 2019 - 2024. All rights reserved.