Modules API には、現在の動作環境に関する情報(モジュール、バージョン、インスタンス)を返す関数が用意されています。
Modules API には他にも、特定のモジュール、バージョン、インスタンスのアドレスを取得するための関数があります。これをアプリケーションで利用すると、リクエストをインスタンス間で送信することができ、これは開発と本番のどちらの環境でも可能です。
次のコードサンプルでは、リクエストのモジュール名とインスタンス ID を取得する方法を示します。
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();
自動スケーリングされるモジュールのインスタンス ID は、一意の base64 エンコード値として返されます(例: e4b565394caa
)。
同じアプリ内のモジュール間で通信するには、相手のモジュールのホスト名を取得します。
次のコードサンプルでは、リクエストのモジュール名とインスタンス ID を取得する方法を示します。
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) {
// ...
}
URL 取得サービスも利用できます。