2

我的任务超过了任务队列的 10 分钟期限。通过不同的文档,我发现使用模块我可以运行一个实例来处理长时间运行的任务,但最好甚至应该使用任务队列来完成。我曾经使用过后端,但它们已被弃用。

我的问题是如何将模块引入我现有的 App Engine 项目以及如何使用它们来运行长时间运行的任务?

以下是一段代码:

Queue queue = QueueFactory.getQueue("myqueue");
TaskOptions task = TaskOptions.Builder.withUrl("/submitworker").method(Method.POST);
queue.add(task);

我必须在上述代码中进行哪些更改才能使用模块添加长时间运行的任务?[“submitworker”是一个 servlet,它是实际长时间运行的任务]

我已经引用了这个链接,但我无法绕过第三步:
3. 将服务声明元素添加到 appengine-application.xml 文件。

另外,即使我成功地将一个模块添加到我的项目中,我如何使用任务队列来定位这个模块?

我已经解决了这个问题,但它是一个 python 实现,我的实现是用 Java 实现的。

我正在寻找有关如何在模块中使用“目标”以及如何在添加到任务队列时使用它的逐步过程。

即使我将长时间运行的模块目标添加到任务队列中,它仍然会在 10 分钟后终止执行,还是即使任务队列中的任务到期,它也会完成任务?

请建议。

4

2 回答 2

0

免责声明:答案完全基于文档(我实际上使用的是 python - 相同的概念但不同的配置)。

要使服务/模块允许长时间运行的任务,您必须将其配置为基本或手动扩展。从缩放类型和实例类Deadline表中的行):

  • Manual scaling列中:

请求可以无限期地运行。手动扩展的实例可以选择处理 /_ah/start 并执行程序或脚本数小时而不返回 HTTP 响应代码。任务最长可以运行 24 小时。

  • Basic scaling列中:

与手动缩放相同。

appengine-web.xml通过相应模块的文件完成的模块缩放配置在缩放元素中进行了描述:

  • <manual-scaling>

可选的。该元素启用模块的手动缩放并设置模块的实例数。

  • <basic-scaling>

可选的。该元素设置模块的实例数。

至于到模块的实际转换,请使用配置文件(包括示例)和appengine-web.xml语法(请参阅moduleservice配置)补充您指向的指南。

关于appengine-application.xml,来自配置文件

META-INF 目录有两个配置文件: appengine-application.xmlapplication.xml. 该 appengine-application.xml文件包含应用程序部署时 App Engine 工具使用的一般信息...

...

请注意,虽然每个appengine-web.xml文件都必须包含 <application>标签,但您在此处提供的名称将被忽略。应用程序的名称取自文件<application>中的标记 appengine-application.xml

要将某个队列定向到某个服务/模块,请使用该queue.xml文件。从语法

  • <target>(推队列):

可选的。命名模块/版本、前端版本或后端的字符串,在其上执行排队到此队列中的所有任务。

在构建任务的 HTTP 请求时,该字符串会附加到您的应用程序的域名中。例如,如果您的应用 ID 是my-app并且您将目标设置为my-version.my-service,则 URL 主机名将设置为 my-version.my-service.my-app.appspot.com

如果未指定目标,则在它们被排队的相同版本的应用程序上调用任务。因此,如果您在未指定队列目标的情况下将默认应用程序版本中的任务排入队列,则会在默认应用程序版本中调用该任务。请注意,如果默认应用程序版本在任务入队和执行之间发生变化,则任务将以新的默认版本运行。

如果您将模块与调度文件一起使用,则您的任务的 HTTP 请求可能会被拦截并重新路由到另一个模块。

于 2016-09-14T04:09:27.823 回答
0

模块和服务是一回事,它们类似于旧的后端(仍然有效,但已弃用)。

有两种让模块工作的基本方法:

  • 创建一个 EAR 并部署它
  • 将服务独立部署为 WAR 文件(这可能是您现在对默认模块所做的事情)

第二个选项可能更简单,因为它只是更改 application-web.xml 的问题。您可以为每个模块创建一个 repo 或分支,或者只是一个更改目标模块的构建过程。

现在你的 application-web.xml 可能是这样的:

<application>@appId@</application>
<version>@appVersion@</version>    
<module>default</module>   

把它改成这样

<application>@appId@</application>
<version>@appVersion@</version>    
<module>long-running-service</module>
<instance-class>B1</instance-class>
<manual-scaling>
    <instances>1</instances>
</manual-scaling>

queue.xml您可以在See here中配置队列本身以针对特定模块。

于 2016-09-16T06:01:27.803 回答