如何在GCP发布/订阅中修复来自推送订阅的多条消息

时间:2019-10-17 20:16:45

标签: google-app-engine google-cloud-platform google-cloud-pubsub

我有一个Cloud Pub / Sub Push订阅,可将同一消息的多个实例推送到处理端点i GAE。我可以跟踪邮件ID,而同一封邮件会多次被推送。

我已将确认超时设置为600秒,但仍然会推送某些消息的多个实例。邮件外没有被“确认”,什么会触发此行为?有人遇到同样的问题吗?

我运行的实例越多,问题似乎越大,但即使使用basic_scaling并与max_instances一起使用,仍然存在1个问题。

我可以在GAE中看到一堆503错误,但是如果我理解正确的话,那不是问题,因为这些消息会自动“重试”,但会发布/订阅。

2 个答案:

答案 0 :(得分:0)

事实证明,这是Pub / Sub的一个众所周知的问题。发布/订阅为“至少一次交付”,并且期望重复。要解决此问题,请在此处阅读一些启发,https://cloud.google.com/blog/products/serverless/cloud-functions-pro-tips-building-idempotent-functions

答案 1 :(得分:0)

我将其发布为答案,因为我没有足够的声誉来发表评论。 :)

您已经知道,一旦Pub / Sub将消息发送给订阅者,订阅者应确认该消息。任何未确认的消息,Cloud Pub / Sub将反复尝试传递(检查here)。这意味着偶尔会出现duplicates。但是,重复率很高可能表明客户端未在配置的ack_deadline_seconds内确认消息,并且Cloud Pub / Sub正在重试消息传递。 如果发布/订阅系统成功并且您的消息已被确认(检查monitorhere),或者如果重复项过多(检查{ {3}}和here)。