Ogni versione di un servizio è definita in un file .yaml
, che indica il nome del servizio e della versione. Di solito il file YAML ha lo stesso nome del servizio che definisce, ma non è obbligatorio. Se esegui il deployment di più versioni di un servizio, puoi creare più file yaml nella stessa directory, uno per ogni versione.
In genere, per ogni servizio si crea una directory, che contiene
YAML e codice sorgente associato. Configurazione facoltativa a livello di applicazione
file (dispatch.yaml
, cron.yaml
, index.yaml
e queue.yaml
) sono
incluso nella directory dell'app di primo livello. L'esempio seguente mostra tre servizi.
In service1
e service2
, i file di origine si trovano allo stesso livello del file YAML. In service3
sono presenti file YAML per due versioni.
Per progetti piccoli e semplici, tutti i file dell'app possono trovarsi in una directory:
Ogni file YAML deve includere un parametro di versione. Per definire il servizio predefinito,
puoi includere esplicitamente il parametro service: default
o uscire dal servizio
dal file.
Il file di configurazione di ogni servizio definisce il tipo di scalabilità e la classe dell'istanza
per un servizio o una versione specifici. Vengono utilizzati parametri di scalabilità diversi a seconda
in base al tipo di scalabilità
specificato. Se non specifichi la scalabilità,
la scalabilità è l'impostazione predefinita. Le impostazioni di scalabilità e della classe di istanze sono descritte nella sezione di appengine-web.xml
documentazione.
Per ogni servizio puoi anche specificare le impostazioni che associano le richieste di URL a specifiche
e identificare file statici per una migliore efficienza del server. Queste impostazioni
sono incluse anche nel file YAML e sono descritte
Riferimento appengine-web.xml
.
Il servizio predefinito
Ogni applicazione ha un unico servizio predefinito. Puoi definire il servizio predefinito in appengine-web.xml
con l'impostazione service: default
, ma non è necessario. Tutta la configurazione
i parametri pertinenti ai servizi possono
essere applicati al servizio predefinito.
File di configurazione facoltativi
Questi file di configurazione controllano le funzionalità facoltative che si applicano a tutte le servizi in un'app:
dispatch.yaml
sostituisce le regole di routing predefinite inviando le richieste in entrata a un servizio specifico in base al percorso o al nome host nell'URL.queue.yaml
configura sia le code push sia le code pull.index.yaml
specifica gli indici di cui ha bisogno la tua app se utilizzi le query Datastore.cron.yaml
configura attività programmate ricorrenti eseguite in orari specifici o a intervalli regolari.
Per eseguire il deployment degli aggiornamenti di questi file di configurazione in App Engine, esegui il seguente comando dalla directory in cui si trovano:
gcloud app deploy [CONFIG_FILE]
Un esempio
Ecco un esempio di come configureresti i vari file in un file WAR
struttura di directory per un'applicazione con due servizi: un servizio predefinito
che gestisce le richieste web, più un altro servizio (denominato my-service
) per il backend
e l'elaborazione dei dati.
Supponendo che la directory EAR di primo livello sia "my-application", definisci il file
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>
Crea le directory WAR per i due servizi: my-application/default
e my-application/my-service
.
Ora crea un file appengine-web.xml
in ogni WAR che specifichi i parametri
per il servizio. Il file deve includere un nome di versione per il servizio. Per definire
servizio predefinito, puoi includere esplicitamente <service>default</service>
o di escluderlo dal file. Ecco il file
my-application/default/WEB-INF/appengine-web.xml
che definisce il valore predefinito
servizio:
<?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>
Il file my-application/my-service/WEB-INF/appengine-web.xml
definisce il servizio che gestirà le richieste in background:
<?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>
Infine, definisci il file my-application/META-INF/application.xml
che elenca i servizi. Tieni presente che il servizio predefinito dovrebbe essere il primo
tra quelli elencati di seguito.
<?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 ignorerà gli elementi <context-root>
, quindi i client HTTP non dovranno
anteponilo al percorso dell'URL quando ci si rivolge a un servizio.