繁体   English   中英

如何使用Google App Engine中的模块并使用Task Queue(Java)向其添加目标?

[英]How to use Modules in Google App Engine and add a target to them using Task Queue (Java)?

我的任务超过了任务队列的最后期限超过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文件。

另外,即使我成功地将模块添加到项目中,如何使用Task Queue定位该模块?

我经历了这个问题,但这是一个python实现,我的实现是在Java中。

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

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

请提出建议。

免责声明:答案仅基于文档(我实际上使用的是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>标记,但是在此处提供的名称将被忽略。 应用程序的名称来自appengine-application.xml文件中的<application>标记。

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

  • <target> (推送队列):

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

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

如果未指定target,那么将在入队的同一版本的应用程序上调用任务。 因此,如果您在默认应用程序版本中使任务排队而未在队列上指定目标,则该任务将在默认应用程序版本中被调用。 请注意,如果默认应用程序版本在入队时间和执行时间之间改变,则任务将以新的默认版本运行。

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

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

有两种使模块正常工作的基本方法:

  • 创建一个EAR并进行部署
  • 作为WAR文件独立部署服务(这可能是您现在正在对默认模块执行的操作)

第二个选项可能更容易,因为这只是更改application-web.xml的问题。 您可以为每个模块提供一个仓库或分支,或者只是一个构建过程来更改您要定位的模块。

现在,您的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的特定模块为目标,请参见此处

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM