GCP Pub Sub:批量处理消息

Posted

技术标签:

【中文标题】GCP Pub Sub:批量处理消息【英文标题】:GCP Pub Sub: process messages by batches 【发布时间】:2021-10-09 01:01:46 【问题描述】:

在 GAE 应用程序中,我们希望批量处理 Pub Sub 消息,例如:每 10 秒读取订阅上的所有待处理消息并批量处理它们(因为这样会更有效率)。同步的subscriber.pull() 可以很好地让我们读取一批待处理的消息。问题是我接下来要做什么?睡 10 秒再读一遍?但这需要一个永久性的后台任务,这在 App Engine 中很难设置。每分钟(或每小时)由 cron 调用的端点,它运行多个周期 [读取和处理消息,睡眠 10 秒] 周期一小时,然后退出?有更好的主意吗?

【问题讨论】:

【参考方案1】:

您可以使用 Cloud Scheduler 每分钟调用一次您的 App Engine 端点。此端点读取 pubsub 订阅一段时间(比如说 45 秒)处理消息,然后返回 200 HTTP 代码。

如果你想按 10s 的时间窗口阅读,你需要在你身边构建流程。继续每分钟调用一次端点(这是无服务器模式,该过程仅在请求处理中执行),但端点监听订阅 10 秒,处理消息,睡眠 10 秒,然后重复 5 次,然后返回 200 HTTP 代码。

【讨论】:

这就是我的想法,但我需要确认一下,谢谢。事实上,使用 Cloud Scheduler 可以确保只有一个当前正在运行的实例具有在给定时间处理消息的任务,而基于 /_ah_start 的任何内容都将在每个实例上运行。

以上是关于GCP Pub Sub:批量处理消息的主要内容,如果未能解决你的问题,请参考以下文章

如何从 Dataflow 批量(有效)发布到 Pub/Sub?

gcp 云函数 pub/sub 主题死信

如何在 GCP Pub Sub 中配置非持久消息?

如何在云 pub/sub 上获取订阅的消息?

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

您可以使用 Google Pub Sub 批量提取消息吗?