PubSub:如何设置没有指数退避的重试策略?

PubSub: How to set a retry policy without exponential backoff?

我有一个向云 运行 服务发送消息的推送订阅。如果 Cloud 运行 服务未成功确认消息(否定确认),我想重新发送消息的次数最多,并且重试之间的时间间隔始终相同(例如,1 分钟后重试 10 次,每次重试)。 .

  1. 我知道我可以设置使用死信队列重新发送消息的最大次数(我也可以在没有死信队列的情况下设置这个次数吗?所以只需 discard/remove 最大次数后的消息。没有消息进入另一个队列的传递尝试次数?)。
  2. 我还可以使用重试策略设置最小退避时间(例如 1 分钟)来决定第一次重试发生的时间,但在此之后 PubSub 的重试策略会使用一些指数延迟。 我可以不在这里指定线性延迟(总是相同的时间间隔)吗?

这是否可以通过此处提到的 PubSub 推送订阅设置以某种方式实现 https://cloud.google.com/pubsub/docs/admin#using_subscription_properties

在此先感谢您的帮助。

在回答您的问题之前,我们必须了解 pubsub 如何处理重试:

默认情况下,pubsub 将尝试发送消息,直到消息被取消确认,因为 Pub/Sub 的设计是为了实现 At least once delivery。将根据设置的消息保留期限(10 分钟到 7 天)继续重新发送消息。

  1. 考虑到 pubsub 的行为,唯一的方法是使用您提到的死信队列。

  2. 重试策略是立即重试或指数退避延迟后重试。您不能在两个选项上配置线性延迟。指数退避由 API 处理,并且可能会根据此 超时更改。如果您正在实施“nack”,则可能的解决方法是,您可以 select“立即重试”并在执行“nack”之前在脚本中添加延迟。有了这个,您可以控制您的 nacked 消息的固定延迟。