App Engine 请求在自动扩展中的 PubSub 推送订阅超时



在 python2 上的自动缩放中的 App Engine 上,请求处理程序对于普通 http 请求的最大超时时间为 60 秒,对于任务队列请求的最大超时时间为 10 分钟。

我找不到有关发布子任务的任何信息。他们是否也像任务队列/云任务一样获得 10 分钟的超时?

此外,谷歌似乎正在更改他们的文档,在python3中,所有请求都将有10分钟的超时: https://cloud.google.com/appengine/docs/standard/python3/how-instances-are-managed

但是如果你去他们的文档中寻找python3中的cron,它会说An HTTP request invoked by cron can run for up to 60 secondshttps://cloud.google.com/appengine/docs/standard/python3/scheduling-jobs-with-cron-yaml

当您提到发布/订阅任务时,我理解您的意思是让 App Engine 服务以推送订阅者的身份订阅主题。

根据 Cloud Pub/Sub文档,您认为的"队列"基本上是 Pub/Sub 根据它接收成功响应的速率动态调整推送请求的速率。

对于推送订阅,Pub/Sub 将 HTTP 成功响应视为对接收消息的工作线程的确认。但是,您必须记住,提供此响应的截止时间最初由订阅的ackDeadline确定,默认情况下为10 秒,如管理订阅文档中所述。

根据接收推送消息文档,如果 App Engine 订阅者未在 ackDeadline 内回复成功的 HTTP 状态代码,Pub/Sub 将重试传递,直到消息在订阅的消息保留期后过期。

方便的是,您可以将推送订阅的 ackDeadline 设置为最长10 分钟,使其与具有自动扩展截止日期的 Python3 App Engine 标准版的持续时间相同。

关于你关于cron触发请求的区别的问题,它确实是这样设计的,但我无法告诉你为什么会这样。

此外,有关发布/订阅和云任务之间区别的更多信息,您可以参考官方文档。有趣的是,Cloud Task 和 Pub/Sub 文档都包含一个略有不同的页面,讨论两者之间的差异。

编辑:

我决定对 Python2 应用程序的超时截止日期进行测试,并确认即使在收到来自 Pub/Sub 推送订阅的请求时,限制也确实存在。

我创建了 3 个基本任务处理程序,分别等待 80、120 和 610 秒发送 200 http 响应。发布到主题时,我注意到以下几点:

  • 正如预期的那样,等待超过 10 分钟的服务未能确认所有请求。
  • 等待 120 秒的服务在少数请求中成功,但在大多数请求中失败。
  • 奇怪的是,等待80年代的服务成功确认了所有请求。

这让我相信 Python2 的截止日期并不像文档所说的那样严格限制。但是,我仍然认为在开发应用程序时牢记记录的截止日期是理想的,并且请注意,即使对于 Pub/Sub 任务,它也会被在某种程度上应用。

由于运行时很可能很快就会被弃用,我认为文档中指定发布/订阅任务截止日期的任何更改都不会及时获得批准,因为对于 Python3,App Engine 没有在配置的 ackDeadline 之前终止请求的风险。

最新更新