![](/img/trans.png)
[英]Google App Engine JAVA: How to add more than one parameter to the Task Queue?
[英]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
语法 (请参阅module
和service
配置)补充您指向的指南。
关于appengine-application.xml
,来自配置文件 :
META-INF目录具有两个配置文件:
appengine-application.xml
和application.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请求可能会被拦截并重新路由到另一个模块。
模块和服务是同一回事,它们类似于旧的后端(仍可使用,但已弃用)。
有两种使模块正常工作的基本方法:
第二个选项可能更容易,因为这只是更改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.