服务的每个版本都在 .yaml
文件中定义,此文件提供相应服务和版本的名称。YAML 文件通常与其定义的服务同名,但这不是必需的。如果您要部署一项服务的多个版本,则可以在同一目录中创建多个 yaml 文件,每个文件对应一个版本。
通常,您可以为每项服务创建一个目录,以包含相应服务的 YAML 文件和关联的源代码。可选的应用级配置文件(dispatch.yaml
、cron.yaml
、index.yaml
和 queue.yaml
)包含在顶级应用目录中。以下示例展示了三项服务。在 service1
和 service2
中,源文件与 YAML 文件处于同一级别。在 service3
中,有两个版本的 YAML 文件。
对于小型简单项目,应用的所有文件都可以位于一个目录中:
每个 YAML 文件都必须包含版本参数。如需定义默认服务,您可以在文件中明确声明参数 service: default
或者不作声明。
每项服务的配置文件都定义了特定服务/版本的扩缩类型和实例类别。使用的扩缩参数取决于您指定的扩缩类型。如果未指定扩缩类型,则默认为自动扩缩。appengine-web.xml
参考文档部分介绍了扩缩和实例类别设置。
对于每项服务,您还可以指定相应设置,以将网址请求映射到特定脚本以及识别静态文件,进而提高服务器效率。这些设置也包含在 yaml 文件中,并在 appengine-web.xml
参考文档部分进行了说明。
默认服务
每个应用都有一项默认服务。您可以在 appengine-web.xml
中使用 service: default
设置定义默认服务,但并不强制要求这样做。与服务相关的所有配置参数都可以应用于默认服务。
可选配置文件
以下配置文件可以对应用于应用中所有服务的可选功能进行控制:
dispatch.yaml
可以凌越路由默认规则,方法是根据网址中的路径或主机名将传入的请求发送到特定服务。queue.yaml
配置推送队列和拉取队列。index.yaml
指定使用 Datastore 查询时您的应用需要哪些索引。cron.yaml
配置在规定的时间或按固定时间间隔运行的计划任务。
要将这些配置文件的更新部署到 App Engine,请从这些文件所在的目录中运行以下命令:
gcloud app deploy [CONFIG_FILE]
示例
以下示例演示了如何为拥有两项服务的应用配置各种 WAR 目录结构的文件:一项服务为处理 Web 请求的默认服务,另一项为用于后端处理的服务(名为 my-service
)。
假设顶级 EAR 目录是“my-application”,请定义文件 my-application/META-INF/appengine-application.xml
:
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<appengine-application xmlns="http://appengine.google.com/ns/1.0">
<application>my-application</application>
</appengine-application>
为 my-application/default
和 my-application/my-service
这两个服务创建 WAR 目录。
现在,在每个指定服务参数的 WAR 文件中创建一个 appengine-web.xml
文件。该文件必须包含该服务的版本名称。如需定义默认服务,您可以在文件中明确声明参数 <service>default</service>
或者不作声明。以下是定义默认服务的文件 my-application/default/WEB-INF/appengine-web.xml
:
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<appengine-web-app xmlns="http://appengine.google.com/ns/1.0">
<application>my-application</application>
<module>default</module>
<version>uno</version>
<threadsafe>true</threadsafe>
</appengine-web-app>
文件 my-application/my-service/WEB-INF/appengine-web.xml
定义将处理后台请求的服务:
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<appengine-web-app xmlns="http://appengine.google.com/ns/1.0">
<application>my-application</application>
<module>my-service</module>
<version>uno</version>
<threadsafe>true</threadsafe>
<manual-scaling>
<instances>5</instances>
</manual-scaling>
</appengine-web-app>
最后,定义用于枚举服务的文件 my-application/META-INF/application.xml
。请注意,默认服务应该是列出的首项服务。
<?xml version="1.0"
encoding="UTF-8"?>
<application
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/application_5.xsd"
version="5">
<description>GAE Java SuperFun app</description>
<display-name>SuperFun</display-name>
<!-- Services -->
<!-- The default service should be listed first -->
<module>
<web>
<web-uri>default</web-uri>
<context-root>default</context-root>
</web>
</module>
<module>
<web>
<web-uri>my-service</web-uri>
<context-root>my-service</context-root>
</web>
</module>
</application>
App Engine 将忽略 <context-root>
元素,因此 HTTP 客户端在为服务指定网址时无需将此类元素添加到网址路径之前。