【问题标题】:Can a Google App Engine Instance create a Request to itself?Google App Engine 实例可以向自己创建请求吗?
【发布时间】:2022-01-13 08:00:17
【问题描述】:

我正在使用云任务来异步处理 App Engine 请求:

<app-engine-instance>/request  ->  <task_queue>/longrunning_task

我意识到我在复制很多代码,比如数据库模型。

一个更简单的解决方案是,如果我可以向自己提出请求

<app-engine-instance>/request  ->  <app-engine-instance>/longrunning_task

这怎么可能?

【问题讨论】:

  • 是的,但是为什么呢?执行内部调用而不是 HTTP 请求。你想解决什么问题?
  • 我想保持请求简短,iirc 没有办法在所有处理完成之前完成该请求的烧瓶,所以直接调用 long-running-function 不起作用
  • 问题是超时。如果您的长期运行时间少于 60 秒,您可以从您的代码中执行调用。否则,您必须使用 CLoud Task 来处理长时间运行的任务(根据您的实例类最多 24 小时)

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


【解决方案1】:

虽然重复代码听起来像是一个错误,但这是执行结合 AppEngine 和 Cloud Tasks 的操作的预期方式,尤其是对于较长的任务。

对 AppEngine 的请求为 limited to 60 seconds,而 Cloud Tasks 不受此类限制。因此,正如 guillaume blaquiere 已经指出的那样,如果您的长时间运行的任务花费的时间少于 60 秒,您可以从您的代码中执行调用。否则,您必须使用 Cloud Task 来处理记录在 here 中的长时间运行的任务。

对于长时间运行的作业,我们建议使用Cloud Tasks。使用 Cloud Tasks,HTTP 请求是长期存在的,并且仅在任何异步工作结束后才返回响应。

话虽如此,AppEngine 实例可以向自身发送请求。但值得注意的是,AppEngine 的请求可能不会发送到发起请求的同一个实例,这种情况发生的唯一情况是只有一个实例,通常这不是最佳实践。

【讨论】:

  • 我用 App Engine -> Cloud Queue -> App Engine 测试了它,它肯定超过 60 年代。我认为是App Engine Cloud Task在这里申请的限制,10分钟左右。
  • 如果你测试过超过 60 秒,那么它一定是 App Engine 任务的时间限制,如 here 所述。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-06
  • 1970-01-01
  • 1970-01-01
  • 2011-04-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多