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

Deploying different languages services to the same Application [Google App Engine]

我有两个应用程序,一个在 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)制作不同的服务(模块)

由于 url 路由规则,appspot.com 上生成的应用程序的命名与您提到的略有不同。来自 Routing via URL:

Sends a request to an available instance of the default version of the named service:

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

但是您可以根据需要使用自定义域映射它们。

至于构建这样的应用程序:

  • 请记住,我 需要 的一项服务名为 default(或保持未命名)

  • 为每项服务创建应用程序 sub-directories(遵循以前推荐的内容 multi-service 应用程序结构图片不再在文档中找到,但在 中捕获)

  • 将每个服务代码的全部内容复制到各自的子目录中

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

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

  • 添加 dispatch.yaml 文件和 re-visit/adjust 服务的请求路径命名空间可能是个好主意(可能是强制性的),以确保正确定向每个请求到相应的服务。特别注意 cron 作业,来自 Cron job definitions 中的 target 行:

If you use a dispatch file, your job might be re-routed. For example, given the following cron.yaml and dispatch.yaml files, the job will run in module2, even though its target is 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