在GAE应用程序中,我们希望批量处理Pub Sub消息,例如:每隔10秒读取订阅上的所有挂起消息,并批量处理它们(因为这样效率更高)。同步的subscriber.pull()
将很好地允许我们读取一批挂起的消息。问题是接下来我该怎么做?睡10秒钟然后再读?但那需要一个永久的后台任务,这在App Engine中很难设置。由cron每分钟(或每小时)调用一次的端点,它运行一个小时的[读取和处理消息,休眠10秒]周期,然后退出。有更好的主意吗?
你可以使用Cloud Scheduler每分钟调用你的App Engine端点。该端点读取pubsub订阅一段时间(假设45秒),处理消息,然后返回一个200 HTTP代码。
如果您想按10s的时间窗口读取,则需要在您的端构建进程。继续每分钟调用一次端点(这是无服务器模式,该过程仅在请求处理中执行),但是端点监听订阅10秒,处理消息,休眠10秒,重复5次,然后返回200 HTTP代码。