Como usar a API Modules

A API Modules oferece funções que retornam informações sobre o ambiente operacional atual (módulo, versão e instância).

A API Modules também tem funções que recuperam o endereço de um módulo, uma versão ou uma instância. Isso permite que um aplicativo envie solicitações de uma instância para outra, tanto nos ambientes de desenvolvimento quanto de produção.

Veja na seguinte amostra de código como saber o nome do módulo e o código da instância para uma solicitação:

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();

O ID da instância de um módulo com escalonamento automático será retornado como um valor exclusivo com codificação base64, por exemplo e4b565394caa.

É possível estabelecer comunicação entre os módulos no mesmo app, buscando o nome do host do módulo de destino:

Veja na seguinte amostra de código como saber o nome do módulo e o código da instância para uma solicitação:

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) {
        // ...
    }

Também é possível usar o serviço Busca de URL.