代码之家  ›  专栏  ›  技术社区  ›  Béranger

使用Google Cloud Pub/Sub分别管理最大交付尝试和费率限制

  •  0
  • Béranger  · 技术社区  · 2 年前

    我正在使用谷歌云Pub/Sub提供的最大传递尝试功能。该功能允许在五次失败的传递尝试后将消息发送到死信主题,这有利于在失败的情况下手动处理消息。

    然而,我们也通过设置“最大实例数”=2来实现对函数的人为速率限制。目标是不断地有两个函数以最大容量ping API。

    Maximum delivery attempts: 5
    Max instances : 2
    

    我的期望是死信主题只会收到失败的消息。不幸的是,它也接收到无法按时传递的消息,导致429错误:“由于没有可用的实例,请求被中止。”根据实例的繁忙状态,这些消息可能会被重试多次,可能是20、30甚至40次。

    将“最大传递尝试次数”设置为40并不理想,因为这意味着要重试40次失败。

    有没有办法分别处理故障和限制?

    非常感谢。

    -- 布朗热

    0 回复  |  直到 2 年前
        1
  •  2
  •   Mirco    2 年前

    您无法更改PubSub推送消息的错误处理。 PubSub对您的服务的请求的每个答复都不是1xx/2xx(请参阅 https://cloud.google.com/pubsub/docs/push?hl=en#receive_push )将作为导致重试的失败进行处理。

    您需要对自己的服务进行费率限制,还是因为您自称的另一项服务而需要进行费率限制?

    如果是后者,您可以在服务中实施费率限制。有很多这样的图书馆。

    否则,您可以通过立即确认速率过高的消息而不进行处理来实现速率限制,然后您的服务只将相同的消息发布回源主题。

    编辑:我想你一定知道自己是否达到了极限。如果是这种情况,如果您可以调用外部API或不调用,请检查每个传入消息。如果是,则处理该消息。如果你达到了限制,你要么只返回2xx而不进行进一步处理(=丢弃消息),要么再次发布同一条消息,然后返回2xx(=手动重播/重试)消息。这样,当您生成新消息(具有相同内容)时,“有效”消息不会达到重试限制