【问题标题】:Deploying different languages services to the same Application [Google App Engine]将不同语言服务部署到同一个应用程序 [Google App Engine]
【发布时间】:2017-05-31 13:56:17
【问题描述】:

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

【问题讨论】:

  • 只是部署为不同的模块,没什么特别的。模块是独立的,可以用不同的语言编写

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


【解决方案1】:

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

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

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

因此,假设您的服务被命名为 pythonjava,而您的应用被命名为 app,那么您的 appspot.com URL 将是:

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

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

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

  • 请记住,我需要的服务之一名为 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 作业需要配置目标(参见@​​987654323@ 中的target 行)。

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

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

如果您使用dispatch file,您的工作可能会被重新安排。为了 例如,给定以下 cron.yamldispatch.yaml 文件,作业将在 module2 中运行,即使它的目标是 模块1

# 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

【讨论】:

  • 我不需要修改app.yaml和appengine-web.xml吧?我只需要“融合”两个 cron 文件并将 cron.yaml 文件放入根目录?
  • 正确,app.yamlappengine-web.xml 是服务级配置文件,仅与各自的服务相关。您可能需要添加一个dispatch.yaml 文件并调整请求路径命名空间...我会为此更新答案。
  • 我是分别部署这两个服务还是它是如何工作的?当我将两个文件夹并排放置并执行 gcloud app deploy --project project-name 时,它​​说 app.yaml 丢失。使用 dispatch.yaml 和 cron,即使项目主文件夹中没有 app.yaml 也能正常工作吗?
  • 服务可以根据需要一起或独立部署。将.yaml 服务列表作为可部署文件显式传递,我怀疑gcloud 自动检测非常基本,仅适用于单服务应用程序(它只是在当前/应用程序目录中寻找app.yaml 文件)。我个人到目前为止只使用了 GAE SDK,所以使用appcfg.py 进行部署(也有同样的问题)。
  • 我的 java 应用程序有问题,我只能使用 mvn appengine:update 部署它,但我无法从 my_app.appspot.com 访问它,我可以将其设为服务以便我可以使用 java-dot-myapp.appspot.com 访问它?如何?它说只有 gcloud app deploy 支持服务部​​署,而 mvn appengine:update 只能部署一个默认的?
猜你喜欢
  • 2016-09-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-27
  • 1970-01-01
  • 2016-11-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多