Le SDK Tablestore pour Java utilise un client dédié pour gérer les tunnels et démarrer la consommation des données. Initialisez le client avec un nom d'instance, un endpoint et des identifiants d'accès.
Prérequis
Installez le SDK Tablestore pour Java et configurez les identifiants d'accès. L'exemple utilise la signature V4 et nécessite la version 5.17.5 ou ultérieure.
Description de la fonctionnalité
TunnelClient est le client dédié au service Tunnel. Les opérations de gestion des tunnels et les workers de consommation de données utilisent ce client pour accéder au service. Réutilisez une instance de client au sein d'un processus et appelez shutdown une fois toutes les opérations de tunnel terminées.
Le constructeur suivant initialise TunnelClient :
public TunnelClient(
String endpoint,
CredentialsProvider credsProvider,
String instanceName,
ClientConfiguration config,
ResourceManager resourceManager
)
L'exemple suivant utilise la configuration de client par défaut et un gestionnaire de ressources exclusif pour initialiser TunnelClient. Il envoie ensuite une requête listTunnel en lecture seule pour une table existante afin de valider l'endpoint, les identifiants d'accès et la connexion réseau. Avant d'exécuter l'exemple, définissez region, instanceName et endpoint en fonction des informations de votre instance. Définissez tableName sur le nom d'une table de données existante dans le modèle Wide Column pour vérifier la connectivité.
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();
}
}
}
}
Paramètres
Client
Le constructeur TunnelClient contient les paramètres suivants.
|
Nom |
Type |
Description |
|
endpoint (obligatoire) |
String |
L'endpoint de l'instance Tablestore. Utilisez un endpoint public, VPC ou de réseau classique correspondant au réseau du client. |
|
credsProvider (obligatoire) |
CredentialsProvider |
Le fournisseur d'identifiants. L'exemple utilise un AccessKey ID, un AccessKey secret et l'ID de région de l'instance pour créer des identifiants V4. |
|
instanceName (obligatoire) |
String |
Le nom de l'instance Tablestore. |
|
config (facultatif) |
ClientConfiguration |
La configuration du client. Si vous définissez ce paramètre sur |
|
resourceManager (facultatif) |
ResourceManager |
Le gestionnaire de ressources pour les connexions client et les threads. Si vous définissez ce paramètre sur |
Configuration du client
Le paramètre config est de type ClientConfiguration. Utilisez les méthodes setXxx correspondantes pour configurer les paramètres de connexion, de délai d'attente et de nouvelle tentative. Si vous n'avez pas besoin de paramètres personnalisés, définissez config sur null. Le tableau suivant décrit les paramètres courants.
|
Nom |
Type |
Description |
|
maxConnections (facultatif) |
int |
Le nombre maximal de connexions HTTP ouvertes. Valeur par défaut : |
|
ioThreadCount (facultatif) |
int |
Le nombre de threads d'E/S pour le client HTTP asynchrone. La valeur par défaut correspond au nombre de processeurs disponibles pour l'environnement d'exécution. |
|
connectionTimeoutInMillisecond (facultatif) |
int |
Le délai d'attente pour l'établissement d'une connexion. Unité : millisecondes. Valeur par défaut : |
|
socketTimeoutInMillisecond (facultatif) |
int |
Le délai d'attente pour la transmission des données sur une connexion établie. Unité : millisecondes. Valeur par défaut : |
|
connectionRequestTimeoutInMillisecond (facultatif) |
int |
Le délai d'attente pour l'obtention d'une connexion depuis le pool de connexions. Unité : millisecondes. Valeur par défaut : |
|
retryThreadCount (facultatif) |
int |
Le nombre de threads utilisés pour les nouvelles tentatives en cas d'erreur. Valeur par défaut : |
|
retryStrategy (facultatif) |
RetryStrategy |
La stratégie de nouvelle tentative des requêtes. Valeur par défaut : |
D'autres paramètres client, tels que le proxy, la compression, le cache DNS, le traçage des requêtes et les paramètres de session SSL, sont également configurés à l'aide des méthodes correspondantes de ClientConfiguration.
Gestionnaire de ressources
Le paramètre resourceManager est de type ResourceManager. Pour un TunnelClient utilisé de manière indépendante, définissez ce paramètre sur null. Le client crée un gestionnaire de ressources basé sur config et libère ses ressources lorsque vous appelez shutdown.
Pour personnaliser ou partager des ressources, utilisez ResourceManager(ClientConfiguration configuration, ExecutorService callbackExecutor) pour créer un ResourceManager propriétaire. Le constructeur contient les paramètres suivants.
|
Nom |
Type |
Description |
|
configuration (facultatif) |
ClientConfiguration |
La configuration du client utilisée pour créer les connexions HTTP et les threads de nouvelle tentative. Si vous définissez ce paramètre sur |
|
callbackExecutor (facultatif) |
ExecutorService |
Le pool de threads utilisé pour exécuter les rappels asynchrones. Si vous définissez ce paramètre sur |
Exemples de scénarios
Personnaliser la configuration du client
Pour ajuster les paramètres par défaut de connexion, de délai d'attente ou de nouvelle tentative, importez ClientConfiguration dans l'exemple de base et remplacez le code d'initialisation du client par le code suivant :
ClientConfiguration config = new ClientConfiguration();
config.setMaxConnections(200);
config.setConnectionTimeoutInMillisecond(10000);
config.setSocketTimeoutInMillisecond(30000);
config.setRetryThreadCount(2);
tunnelClient = new TunnelClient(
endpoint,
provider,
instanceName,
config,
null
);
Partager les ressources du client
Si plusieurs clients doivent partager des connexions HTTP, des threads de nouvelle tentative et des threads de rappel, créez un ResourceManager propriétaire et transmettez l'instance partagée renvoyée par sharedResourceManager() à chaque client. Après avoir fermé tous les clients, fermez le ResourceManager propriétaire.
Ne transmettez pas directement un ResourceManager propriétaire à plusieurs clients. Sinon, lorsque n'importe quel client appelle shutdown, les ressources partagées sont libérées.
Le code suivant réutilise les variables et le fournisseur d'identifiants de l'exemple de base. Importez ClientConfiguration et ResourceManager avant d'exécuter le code.
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();
}