Utiliser l'API Modules

L'API Modules propose des fonctions qui renvoient des informations sur l'environnement d'exploitation actuel (module, version et instance).

Elle comporte également des fonctions qui servent à récupérer l'adresse d'un module, d'une version ou d'une instance. Cela permet à une application d'envoyer des requêtes d'une instance à une autre dans les environnements de développement et de production.

L'exemple de code suivant montre comment obtenir le nom du module et l'ID d'instance pour une requête :

import com.google.appengine.api.modules.ModulesService;
import com.google.appengine.api.modules.ModulesServiceFactory;

ModulesService modulesApi = ModulesServiceFactory.getModulesService();

// Get the service name handling the current request.
String currentModuleName = modulesApi.getCurrentModule();
// Get the instance handling the current request.
int currentInstance = modulesApi.getCurrentInstance();

L'ID d'instance d'un module avec scaling automatique est renvoyé sous forme de valeur unique encodée en base64, par exemple e4b565394caa.

Vous pouvez communiquer avec les modules d'une même application en récupérant le nom d'hôte du module cible :

L'exemple de code suivant indique comment obtenir le nom du module et l'ID d'instance d'une requête :

import com.google.appengine.api.modules.ModulesService;
import com.google.appengine.api.modules.ModulesServiceFactory;

import java.net.MalformedURLException;
import java.net.URL;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;

// ...

ModulesService modulesApi = ModulesServiceFactory.getModulesService();

// ...
    try {
        URL url = new URL("http://" +
            modulesApi.getVersionHostname("my-backend-service","v1") +
            "/fetch-stats");
        BufferedReader reader = new BufferedReader(
            new InputStreamReader(url.openStream()));
        String line;

        while ((line = reader.readLine()) != null) {
            // Do something...
        }
        reader.close();

    } catch (MalformedURLException e) {
        // ...
    } catch (IOException e) {
        // ...
    }

Vous pouvez également utiliser le service de récupération d'URL.