如何设置使用任务队列和GWT的Google App Engine项目?

时间:2014-10-19 00:34:04

标签: java eclipse google-app-engine gwt google-cloud-platform

我想做的很多工作都涉及长时间运行的流程,我想在托管环境中运行,并为用户提供Web界面,以查看长时间运行的作业的结果。

我相信Google App Engine及其"模块"功能(https://cloud.google.com/appengine/docs/java/modules/)是一项很棒的服务,但我一直在努力弄清楚如何为此目的设置它(请参阅App Engine Modules with GWTPossible to use Google Modules with Google Plugin for Eclipse?How use Eclipse to develop Google Modules for Google Cloud?) 。有人可能一直试图做同样的事情(参见:how to create gwt gae with app engine modules using google eclipse plugin)但是没有接受的答案,而且我正在寻找更全面的指示。

有人可以提供一系列逐步说明来设置涉及以下项目架构的以下Hello World项目吗?

要求

  • 用户访问网页并输入作业名称,例如" Hello World"以及他们收到结果的电子邮件地址。
  • Google App Engine然后执行长时间运行的计算(例如,10小时,即长度超过缩放类型模块的10分钟时间限制"自动"如此处所述https://cloud.google.com/appengine/docs/java/modules/
  • Google App Engine然后向用户发送一封电子邮件,说明" Hello World"计算完成后,将结果提供给电子邮件正文中。

项目架构

  • Web前端(理想情况下是GWT,但提出任何合适的替代方案,因为它可能是此处所述的问题:App Engine Modules with GWT
  • 模块1(缩放类型=自动):通过将作业放在具有用户名称的Google任务队列上来响应Web前端请求。电子邮件地址记录在Google数据存储区中,主键等于作业名称(目的是为了让我们看看如何让两个模块共享同一个数据存储区;这里提到了它:Serving multiple GAE modules from one development server?但是我希望看到更多细节。
  • 模块2(缩放类型=基本缩放):从Google任务队列中获取作业,执行长时间运行的计算,并通过电子邮件发送结果。请注意,通过使用作业名称在数据存储区中查找电子邮件地址来获取该电子邮件地址。

开发环境

1 个答案:

答案 0 :(得分:0)

  1. 您的第一个模块是GWT应用。它提供了一个用户界面。

  2. 当用户发起请求时,您对同一模块中的某个服务进行标准RPC调用。在此服务中,您可以使用Task API创建任务。此任务包括target parameter,指向您的第二个模块。

  3. 或者,您可以直接向第二个模块进行REST调用。

    1. 你的第二个模块是普通的Java。它不需要GWT,并且它不是App Engine意义上的单独应用程序。它执行任务并使用App Engine Mail API将结果通过电子邮件发送给用户。
    2. 您在Eclipse中不需要任何特殊功能来创建此设置。您只需在现有项目中创建一个名为EAR的新目录,然后创建/复制一堆配置文件。 Modules Configuration提供了有关如何执行此操作的详细说明。如果您熟悉后端,则可以通过阅读Converting backends to Modules来了解该过程。

      您可以创建两个单独的Eclipse项目 - 每个模块一个,但不是必需的。您只需为每个模块使用单独的源目录即可。例如,如果您将模块命名为" gwtapp"和"后端"您可以在项目中创建以下包:

      gwtapp.src.com.myproject...
      backend.src.com.myproject...
      

      然后打开构建路径(项目属性> Java构建路径),单击“源”选项卡,然后单击“添加文件夹”。添加两个文件夹:

      gwtapp/src
      backend/src
      

      到你的项目。对于每个项目,选择一个不同的输出文件夹:gwtapp/src将指向MyProject/ear/gwtapp/war/WEB-INF/classesbackend/src将指向MyProject/ear/backend/war/WEB-INF/classes。当然,在执行此步骤之前,您必须创建这些文件夹(ear/gwtapp/war/WEB-INFear/backend/war/WEB-INF)。