将不同语言的服务部署到同一个应用程序[Google App Engine]

时间:2017-01-16 16:54:58

标签: java python maven google-app-engine google-cloud-storage

我有两个应用程序,一个在Python中,另一个在Java中。

在Python中,我的应用程序位于app.yaml中设置的服务下,cron.yaml也调用该服务。

在我的(Maven)Java应用程序中,它不在服务之下,因此它是默认服务(如果需要,我将更改)。该应用也会使用。./WEB-INF/cron.xml文件以及../WEB-INF/appengine-web.xml

中有关该应用的信息进行调用

目前他们没有相互联系,我将这两个应用程序部署到不同的项目。

我想将它们融合并将它们放在同一个项目中:

python-app.project.appspot.com

java-app.project.appspot.com

而不是当前的

python-app.project1.appspot.com

project2.appspot.com

我没有尝试使用app.yaml和appengine-web.xml文件,因为我不知道是否要修改它们。

如何使用不同语言(Python和Java)制作不同的服务(模块)

1 个答案:

答案 0 :(得分:3)

由于网址路由规则,appspot.com上生成的应用的命名与您提到的有点不同。来自Routing via URL

  

将请求发送到默认版本的可用实例   命名服务:

https://service-dot-app-id.appspot.com
http://service.my-custom-domain.com

因此,假设您的服务名为pythonjava且您的应用名为app,则您的appspot.com网址将为:

python-dot-app.appspot.com
java-dot-app.appspot.com

但您可以使用自定义域将它们映射到它们。

至于构建这样的app:

  • 请注意,需要的服务之一名为default(或保持未命名)

  • 为每项服务创建应用程序子目录(遵循以前在文档中找不到的多服务应用程序结构图片,但在Can a default service/module in a Google App Engine app be a sibling of a non-default one in terms of folder structure?中捕获)

  • 将每个服务代码的全部内容复制到相应的子目录

  • 识别您拥有的应用级配置文件(cron.yamldispatch.yamlqueue.yamlindex.yaml或其等效的java)并将其移动一级,在应用程序级目录(如果两个服务中都存在这样的配置文件,您可能需要合并它们)。您可能需要为这些文件选择一种语言,我会选择python。 Cron作业需要配置目标(请参阅Cron job definitions中的target行)。

    请记住,部署一个/所有模块可能不一定会像您习惯的那样更新这些文件,而是可能需要明确部署它们 - 请查看相应的服务配置文档。在部署服务时,您应该留意可能会覆盖这些配置,您可能需要提出一定的部署顺序。

  • 添加dispatch.yaml文件并重新访问/调整服务的请求路径名称空间可能是一个好主意(可能是强制性的),以确保每个请求都正确定向到相应的服务。从Cron job definitionstarget行开始特别关注cron作业:

  

如果您使用dispatch file,您的工作可能会被重新路由。对于   例如,给出以下 cron.yaml dispatch.yaml   文件,作业将在 module2 中运行,即使其目标是    module1

# cron.yaml
cron:
- description: "test dispatch vs target"
  url: /tasks/hello_module2
  schedule: every 1 mins
  target: module1

# dispatch.yaml:
dispatch:
- url: '*/tasks/hello_module2'
  module: module2

https://cloud.google.com/appengine/docs/python/config/cronref#cron_job_definitions