发布/订阅主题的 GCP Cloud Function 触发器速率限制

she*_*nzy 8 message-queue publish-subscribe google-cloud-platform google-cloud-pubsub google-cloud-functions

我有一个从 Pub/Sub 主题触发的云函数。

我想对我的 Cloud Function 进行速率限制,因此我将最大实例设置为 5。在我的情况下,生成的消息将比 Cloud Functions 更多(并且我想限制正在运行的 Cloud Functions 的数量)。

我预计这个过程的行为类似于 Kafka/队列 - 主题消息将被累积,云函数将慢慢消耗消息,直到主题为空。

但似乎所有没有触发云功能(ack)的消息,只是发送了一个UNACK - 并留下了。我的订阅详情:

在此输入图像描述

确认截止时间最大值对我来说太低了(由于速率限制,云功能可能需要几个小时才能收到消息)。

我可以在 Pub/Sub 中更改哪些内容来满足我的需求?或者我需要添加一个队列?(Pub/Sub 发送到任务队列,Cloud Function 消耗任务队列?)。

顺便说一句,发布/订阅数据实际上是 GCS 事件。如果这是 AWS,我只需将 S3 文件创建的事件发送到 SQS,并让 Lambda 在队列的另一端进行使用。

任何帮助,将不胜感激。

she*_*nzy 3

理想的解决方案就是更改重试策略。当使用“指数退避延迟后重试”时,即使在最大指数延迟(600 秒)之后,Pub/Sub仍将继续重试。这样,您可以在 Pub/Sub 中拥有大量消息,并使用一些云函数慢慢地处理它们 - 这符合我们对速率限制的需求。

基本上,一切都是一样的,但配置发生了变化,结果是:

在此输入图像描述

这正是我一直在寻找的:)