Azure Cosmos DB Java v3 SDKで冗長化されたインスタンスのリージョンやURLを取得する

このエントリは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());
    }
});

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト /  変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト /  変更 )

%s と連携中