2

我的任务超过了任务队列超过10分钟的最后期限。通过不同的文档,我发现使用模块我可以运行一个实例来处理长时间运行的任务,但最好甚至应该使用任务队列来完成。我曾经使用后端,但它们已被弃用。如何在Google App Engine中使用模块并使用任务队列(Java)向其添加目标?

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

以下是一段代码:

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

我有什么变化,上面的代码,以增加使用一个模块一个长时间运行的任务? [在“submitworker”是一个servlet这是实际的长期运行的任务]

我曾提到this链接,但我无法与第三步得到解决:
3.添加服务声明元素的AppEngine上-application.xml文件。

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

我已经通过this的问题,但它是一个python实现,我的实现是在Java中。

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

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

请建议。

回答

0

模块和服务是一样的东西,他们类似于旧的后端(仍然有效,但不推荐使用)。

有越来越模块的两种基本方式工作:

  • 创建EAR和部署
  • 部署服务作为独立WAR文件(这可能是你现在正在做的事情为默认模块)

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

现在您的应用程序的web.xml可能有这样的事情:

<application>@[email protected]</application> 
<version>@[email protected]</version>  
<module>default</module> 

将其更改为这样的事情

<application>@[email protected]</application> 
<version>@[email protected]</version>  
<module>long-running-service</module> 
<instance-class>B1</instance-class> 
<manual-scaling> 
    <instances>1</instances> 
</manual-scaling> 

您配置队列本身的目标在queue.xml的特定模块见here

+0

谢谢......!我遵循了指南并成功地在应用引擎中创建了一项新服务。在queue.xml中也添加了,但是有什么办法可以知道这个任务真的是在后台执行的,我有一个代码显示了有关任务的不断更新,但是更新值没有在前端,可能是什么问题?另外,10分钟后,任务消失,即使它从任务队列中消失,任务仍在后端实例上执行吗? –

+0

您可以在云控制台中查看任务的重试状态,并且如果您想记录该请求,则可以在请求中以标题的形式访问重试计数。您可以在云日志查看器中查看按服务细分的日志,以查看发生的情况。任务不应该消失,除非它成功或超过了重试次数。另外,当问题解决时,不要忘记接受最好的答案 - 它可以帮助每个人。 – Nick

+0

谢谢@尼克!答案帮助我了解了应用程序引擎中的服务和模块,并使我的概念清晰明了。 –

0

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

要使服务/模块允许长时间运行的任务,您必须对其进行配置以进行基本或手动缩放。从Scaling types and instance classes(在表中的Deadline行):

    Manual scaling

请求可以无限期地运行。手动缩放的实例可以选择 来处理/ _ah /启动并执行程序或脚本很多小时 而不返回HTTP响应代码。任务可以运行长达24小时。

  • Basic scaling柱:

同手动缩放。

模块缩放CONFIGS,经由相应的模块的appengine-web.xml文件来完成,在Scaling elements描述:

  • <manual-scaling>

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

  • <basic-scaling>

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

至于实际转换到模块,补充你指出与Configuration Files(包括an example)导向件和appengine-web.xml Syntax(见moduleservice CONFIGS)。

关于appengine-application.xml,从Configuration Files

的META-INF目录下有两个配置文件: appengine-application.xmlapplication.xml。该 appengine-application.xml文件包含在你的应用程序部署使用 App Engine的工具一般资料...

...

注意的是,虽然每一个appengine-web.xml文件必须包含 <application>标签中,您提供的名称将被忽略。 的名称取自appengine-application.xml文件中的<application>标记。

要将某个队列指向某个服务/模块,请使用queue.xml文件。从Syntax

  • <target>(推送队列):

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

构建一个任务的HTTP请求时,该字符串被预置为您的应用的域名。例如,如果您的应用ID为 为my-app并且您将目标设置为my-version。我的服务, URL主机名将被设置为 my-version.my-service.my-app.appspot.com

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

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

相关问题