Tablestore SDK for Java は、専用のクライアントを使用してトンネルの管理とデータ消費の開始を行います。インスタンス名、エンドポイント、アクセス認証情報を使用してクライアントを初期化します。
前提条件
Tablestore SDK for Java をインストールし、アクセス認証情報を設定します。この例では V4 署名を使用するため、バージョン 5.17.5 以降が必要です。
機能説明
TunnelClient は、トンネルサービス専用のクライアントです。トンネル管理操作とデータ消費ワーカーは、このクライアントを使用してサービスにアクセスします。プロセス内でクライアントインスタンスを再利用し、すべてのトンネル操作が完了したら shutdown を呼び出します。
次のコンストラクターは TunnelClient を初期化します:
public TunnelClient(
String endpoint,
CredentialsProvider credsProvider,
String instanceName,
ClientConfiguration config,
ResourceManager resourceManager
)
次の例では、デフォルトのクライアント構成と専用のリソースマネージャーを使用して TunnelClient を初期化します。次に、既存のテーブルに対して読み取り専用の listTunnel リクエストを送信し、エンドポイント、アクセス認証情報、およびネットワーク接続を検証します。この例を実行する前に、ご利用のインスタンス情報に基づいて region、instanceName、および endpoint を設定してください。接続性を検証するために、tableName を Wide Column モデルの既存のデータテーブルの名前に設定してください。
import com.alicloud.openservices.tablestore.TunnelClient;
import com.alicloud.openservices.tablestore.core.auth.CredentialsProvider;
import com.alicloud.openservices.tablestore.core.auth.DefaultCredentialProvider;
import com.alicloud.openservices.tablestore.core.auth.DefaultCredentials;
import com.alicloud.openservices.tablestore.core.auth.V4Credentials;
import com.alicloud.openservices.tablestore.model.tunnel.ListTunnelRequest;
import com.alicloud.openservices.tablestore.model.tunnel.ListTunnelResponse;
public class InitTunnelClient {
public static void main(String[] args) {
String accessKeyId = System.getenv("TABLESTORE_ACCESS_KEY_ID");
String accessKeySecret = System.getenv("TABLESTORE_ACCESS_KEY_SECRET");
String region = "<region-id>";
String instanceName = "<instance-name>";
String endpoint = "<instance-endpoint>";
String tableName = "<table-name>";
TunnelClient tunnelClient = null;
try {
DefaultCredentials credentials = new DefaultCredentials(accessKeyId, accessKeySecret);
V4Credentials credentialsV4 = V4Credentials.createByServiceCredentials(credentials, region);
CredentialsProvider provider = new DefaultCredentialProvider(credentialsV4);
tunnelClient = new TunnelClient(
endpoint,
provider,
instanceName,
null,
null
);
ListTunnelResponse response = tunnelClient.listTunnel(new ListTunnelRequest(tableName));
System.out.println("TunnelClient initialized. Tunnels: " + response.getTunnelInfos().size());
System.out.println("RequestId: " + response.getRequestId());
} finally {
if (tunnelClient != null) {
tunnelClient.shutdown();
}
}
}
}
パラメーター
クライアント
TunnelClient のコンストラクターには、次のパラメーターが含まれています。
|
名前 |
型 |
説明 |
|
endpoint (必須) |
String |
Tablestore インスタンスのエンドポイント。クライアントのネットワークに合わせて、パブリックネットワーク、VPC、またはクラシックネットワークのエンドポイントを使用します。 |
|
credsProvider (必須) |
CredentialsProvider |
認証情報プロバイダー。この例では、AccessKey ID、AccessKey Secret、およびインスタンスのリージョン ID を使用して V4 認証情報を作成します。 |
|
instanceName (必須) |
String |
Tablestore インスタンスの名前。 |
|
config (任意) |
ClientConfiguration |
クライアント構成。このパラメーターを |
|
resourceManager (任意) |
ResourceManager |
クライアントの接続とスレッドのためのリソースマネージャー。このパラメーターを |
クライアント構成
config パラメーターは ClientConfiguration 型です。対応する setXxx メソッドを使用して、接続、タイムアウト、およびリトライの設定を構成します。カスタム設定が不要な場合は、config を null に設定します。次の表に、一般的な設定を示します。
|
名前 |
型 |
説明 |
|
maxConnections (任意) |
int |
オープン可能な HTTP 接続の最大数。デフォルト値: |
|
ioThreadCount (任意) |
int |
非同期 HTTP クライアントの I/O スレッド数。デフォルト値は、ランタイムが利用可能なプロセッサの数です。 |
|
connectionTimeoutInMillisecond (任意) |
int |
接続を確立するためのタイムアウト期間。単位:ミリ秒。デフォルト値: |
|
socketTimeoutInMillisecond (任意) |
int |
確立された接続でデータを転送するためのタイムアウト期間。単位:ミリ秒。デフォルト値: |
|
connectionRequestTimeoutInMillisecond (任意) |
int |
接続プールから接続を取得するためのタイムアウト期間。単位:ミリ秒。デフォルト値: |
|
retryThreadCount (任意) |
int |
エラーリトライに使用されるスレッド数。デフォルト値: |
|
retryStrategy (任意) |
RetryStrategy |
リクエストのリトライ戦略。デフォルト値: |
プロキシ、圧縮、DNS キャッシュ、リクエストトレース、SSL セッション設定などの他のクライアント設定も、ClientConfiguration の対応するメソッドを使用して構成します。
リソースマネージャー
resourceManager パラメーターは ResourceManager 型です。独立して使用される TunnelClient の場合、このパラメーターを null に設定します。クライアントは config に基づいてリソースマネージャーを作成し、shutdown を呼び出すとリソースをリリースします。
リソースをカスタマイズまたは共有するには、ResourceManager(ClientConfiguration configuration, ExecutorService callbackExecutor) を使用して所有者の ResourceManager を作成します。このコンストラクターには、次のパラメーターが含まれています。
|
名前 |
型 |
説明 |
|
configuration (任意) |
ClientConfiguration |
HTTP 接続とリトライ用スレッドの作成に使用されるクライアント構成。このパラメーターを |
|
callbackExecutor (任意) |
ExecutorService |
非同期コールバックを実行するために使用されるスレッドプール。このパラメーターを |
シナリオ例
クライアント構成のカスタマイズ
デフォルトの接続、タイムアウト、またはリトライ設定を調整するには、基本例で ClientConfiguration をインポートし、クライアントの初期化コードを次のコードに置き換えます:
ClientConfiguration config = new ClientConfiguration();
config.setMaxConnections(200);
config.setConnectionTimeoutInMillisecond(10000);
config.setSocketTimeoutInMillisecond(30000);
config.setRetryThreadCount(2);
tunnelClient = new TunnelClient(
endpoint,
provider,
instanceName,
config,
null
);
クライアントリソースの共有
複数のクライアントが HTTP 接続、リトライ用スレッド、およびコールバック用スレッドを共有する必要がある場合は、所有者の ResourceManager を作成し、sharedResourceManager() によって返される共有インスタンスを各クライアントに渡します。すべてのクライアントを閉じた後、所有者の ResourceManager を閉じます。
所有者の ResourceManager を複数のクライアントに直接渡さないでください。そうしないと、いずれかのクライアントが shutdown を呼び出したときに、共有リソースがリリースされてしまいます。
次のコードは、基本例の変数と認証情報プロバイダーを再利用します。コードを実行する前に、ClientConfiguration と ResourceManager をインポートしてください。
ClientConfiguration config = new ClientConfiguration();
ResourceManager owner = new ResourceManager(config);
TunnelClient tunnelClientA = new TunnelClient(
endpoint, provider, instanceName, config, owner.sharedResourceManager());
TunnelClient tunnelClientB = new TunnelClient(
endpoint, provider, instanceName, config, owner.sharedResourceManager());
try {
tunnelClientA.listTunnel(new ListTunnelRequest(tableName));
tunnelClientB.listTunnel(new ListTunnelRequest(tableName));
} finally {
tunnelClientA.shutdown();
tunnelClientB.shutdown();
owner.shutdown();
}