このエントリは2019/08/26現在の情報を基にしており、将来の機能追加や廃止に伴い、記載内容との乖離が発生する可能性があります。また、この内容はSDK v3をベースにしています。
以前、以下のエントリを記載したが、SDK v2ベースだったため、v3を基にした内容を別途記載しておく。
Cosmos DBの地理冗長化に関するあれこれ (v2)
https://logico-jp.io/2019/05/09/cosmos-db-distributed-across-multi-regions-v2/
各Regionに冗長化されたCosmos DBのURIを取得する
v2で利用しているAPIは以下の場所に移動した。Package名称からもわかるように、将来隠蔽される可能性があるので注意が必要。
Package com.azure.data.cosmos.internal
https://azure.github.io/azure-sdk-for-java/track1reports/com/azure/data/cosmos/internal/package-summary.html
基本的にはv2と同じメソッドを呼び出すことができるが、少々異なる箇所もあるので以下に記載しておく。
地理冗長化先のリージョンとURL
AsyncCosmosClientクラスのインスタンスを作成する。getDatabaseAccount()はFlux<DatabaseAccount>を返すので、今回はListで受け取るようにしている。もちろんStreamで受け取ることもできる。
AsyncDocumentClient tempClient = new AsyncDocumentClient.Builder()
.withServiceEndpoint(ENDPOINT)
.withMasterKeyOrResourceToken(KEY)
.build();
List<DatabaseAccount> databaseAccountList = tempClient.getDatabaseAccount().buffer().blockLast();
あとは、取得したDatabaseAccountに設定されているリージョンとURLを調べればよい。
databaseAccountList.forEach(databaseAccount -> {
Iterator<DatabaseAccountLocation> it = databaseAccount.getReadableLocations().iterator();
while (it.hasNext()) {
DatabaseAccountLocation loc = it.next();
System.out.println(loc.getName() + "---" + loc.getEndpoint());
}
});