Le SDK Tablestore pour Java prend en charge les opérations sur les modèles à colonnes larges, de séries temporelles et de messagerie.
Intégration rapide
Intégrez le SDK Tablestore pour Java, depuis la configuration de l'environnement jusqu'à la vérification du client.
Préparer l'environnement
Installez le runtime Java (Java 6 ou version ultérieure). Exécutez java -version pour vérifier l'installation.
Installer le SDK
Utilisez la dernière version du SDK pour garantir le bon fonctionnement des exemples de code.
Ajouter une dépendance Maven (recommandé)
Pour utiliser le SDK Tablestore pour Java dans un projet Maven, ajoutez la dépendance suivante à votre fichier pom.xml.
<dependency>
<groupId>com.aliyun.openservices</groupId>
<artifactId>tablestore</artifactId>
<version>5.17.7</version>
</dependency>
Importer les packages JAR dans un projet Eclipse
Pour les projets non Maven, importez manuellement les packages JAR.
Téléchargez le package SDK Java.
Décompressez le package.
Dans Eclipse, cliquez avec le bouton droit sur votre projet et choisissez .
Sélectionnez le fichier
tablestore-5.17.7.jarainsi que tous les fichiers JAR du dossierlibcontenus dans le package décompressé, puis cliquez sur Open.-
Vérifiez que les packages JAR apparaissent sous
Libraries, puis cliquez sur Apply and Close.RemarqueSi vous utilisez Java SE 9 ou une version ultérieure, vous devez importer les packages JAR vers
ModulepathsousLibraries.
Configurer les identifiants d'accès
Créez un AccessKey pour votre compte Alibaba Cloud ou utilisateur RAM, puis configurez-le comme variable d'environnement afin d'éviter d'intégrer les identifiants en dur dans le code.
Redémarrez votre IDE, votre terminal, vos autres applications de bureau et vos services en arrière-plan après la configuration pour charger les variables d'environnement mises à jour. Pour plus d'informations sur les autres types d'identifiants d'accès, consultez la rubrique Configurer les identifiants d'accès .
Linux
-
Ajoutez les variables d'environnement au fichier
~/.bashrc:echo "export TABLESTORE_ACCESS_KEY_ID='YOUR_ACCESS_KEY_ID'" >> ~/.bashrc echo "export TABLESTORE_ACCESS_KEY_SECRET='YOUR_ACCESS_KEY_SECRET'" >> ~/.bashrc -
Appliquez les modifications :
source ~/.bashrc -
Vérifiez les variables d'environnement :
echo $TABLESTORE_ACCESS_KEY_ID echo $TABLESTORE_ACCESS_KEY_SECRET
macOS
-
Vérifiez votre shell par défaut :
echo $SHELL -
Configurez les variables selon le type de shell utilisé :
Zsh
-
Ajoutez les variables d'environnement au fichier
~/.zshrc:echo "export TABLESTORE_ACCESS_KEY_ID='YOUR_ACCESS_KEY_ID'" >> ~/.zshrc echo "export TABLESTORE_ACCESS_KEY_SECRET='YOUR_ACCESS_KEY_SECRET'" >> ~/.zshrc -
Appliquez les modifications :
source ~/.zshrc -
Vérifiez les variables d'environnement :
echo $TABLESTORE_ACCESS_KEY_ID echo $TABLESTORE_ACCESS_KEY_SECRET
Bash
-
Ajoutez les variables d'environnement au fichier
~/.bash_profile:echo "export TABLESTORE_ACCESS_KEY_ID='YOUR_ACCESS_KEY_ID'" >> ~/.bash_profile echo "export TABLESTORE_ACCESS_KEY_SECRET='YOUR_ACCESS_KEY_SECRET'" >> ~/.bash_profile -
Appliquez les modifications :
source ~/.bash_profile -
Vérifiez les variables d'environnement :
echo $TABLESTORE_ACCESS_KEY_ID echo $TABLESTORE_ACCESS_KEY_SECRET
-
Windows
CMD
-
Définissez les variables d'environnement dans CMD :
setx TABLESTORE_ACCESS_KEY_ID "YOUR_ACCESS_KEY_ID" setx TABLESTORE_ACCESS_KEY_SECRET "YOUR_ACCESS_KEY_SECRET" -
Redémarrez CMD et vérifiez la configuration :
echo %TABLESTORE_ACCESS_KEY_ID% echo %TABLESTORE_ACCESS_KEY_SECRET%
PowerShell
-
Exécutez la commande suivante dans PowerShell :
[Environment]::SetEnvironmentVariable("TABLESTORE_ACCESS_KEY_ID", "YOUR_ACCESS_KEY_ID", [EnvironmentVariableTarget]::User) [Environment]::SetEnvironmentVariable("TABLESTORE_ACCESS_KEY_SECRET", "YOUR_ACCESS_KEY_SECRET", [EnvironmentVariableTarget]::User) -
Vérifiez les variables d'environnement :
[Environment]::GetEnvironmentVariable("TABLESTORE_ACCESS_KEY_ID", [EnvironmentVariableTarget]::User) [Environment]::GetEnvironmentVariable("TABLESTORE_ACCESS_KEY_SECRET", [EnvironmentVariableTarget]::User)
Initialiser le client
Initialisez un client synchrone avec une signature V4 et vérifiez la connexion en répertoriant les tables de données.
Le client est thread-safe et gère automatiquement les pools de threads internes ainsi que les ressources de connexion. Partagez une seule instance entre plusieurs threads plutôt que d'en créer une par thread ou par requête.
L'accès via le réseau public est désactivé par défaut pour les nouvelles instances. Pour accéder à une instance via Internet, activez cette option sur la page Network Management.
Modèle à colonnes larges
import com.alicloud.openservices.tablestore.SyncClient;
import com.alicloud.openservices.tablestore.core.ResourceManager;
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.ListTableResponse;
public class SyncClientV4 {
public static void main(String[] args) {
// Obtain access credentials from environment variables. You must configure TABLESTORE_ACCESS_KEY_ID and TABLESTORE_ACCESS_KEY_SECRET.
final String accessKeyId = System.getenv("TABLESTORE_ACCESS_KEY_ID");
final String accessKeySecret = System.getenv("TABLESTORE_ACCESS_KEY_SECRET");
// TODO: Modify the following configurations as needed.
final String region = "cn-hangzhou"; // Specify the region ID of the instance, for example, "cn-hangzhou".
final String instanceName = "n01k********"; // Specify the instance name.
final String endpoint = "https://n01k********.cn-hangzhou.ots.aliyuncs.com"; // Specify the instance endpoint.
SyncClient client = null;
try {
// Construct credentials.
DefaultCredentials credentials = new DefaultCredentials(accessKeyId, accessKeySecret);
V4Credentials credentialsV4 = V4Credentials.createByServiceCredentials(credentials, region);
CredentialsProvider provider = new DefaultCredentialProvider(credentialsV4);
// Create a client instance.
client = new SyncClient(endpoint, provider, instanceName, null, new ResourceManager(null, null));
// List all data tables.
ListTableResponse listTableResponse = client.listTable();
// Print the list of data tables.
System.out.println("Found " + listTableResponse.getTableNames().size() + " data tables in instance '" + instanceName + "':");
listTableResponse.getTableNames().forEach(System.out::println);
} catch (Exception e) {
System.err.println("Failed to list data tables. Details:");
e.printStackTrace();
} finally {
// Shut down the client.
if (client != null) {
client.shutdown();
}
}
}
}
Modèle de séries temporelles
import com.alicloud.openservices.tablestore.TimeseriesClient;
import com.alicloud.openservices.tablestore.core.ResourceManager;
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.timeseries.ListTimeseriesTableResponse;
public class TimeseriesSyncClientV4 {
public static void main(String[] args) {
// Obtain access credentials from environment variables. You must configure TABLESTORE_ACCESS_KEY_ID and TABLESTORE_ACCESS_KEY_SECRET.
final String accessKeyId = System.getenv("TABLESTORE_ACCESS_KEY_ID");
final String accessKeySecret = System.getenv("TABLESTORE_ACCESS_KEY_SECRET");
// TODO: Modify the following configurations as needed.
final String region = "cn-hangzhou"; // Specify the region ID of the instance, for example, "cn-hangzhou".
final String instanceName = "n01k********"; // Specify the instance name.
final String endpoint = "https://n01k********.cn-hangzhou.ots.aliyuncs.com"; // Specify the instance endpoint.
TimeseriesClient client = null;
try {
// Construct V4 signature credentials.
DefaultCredentials credentials = new DefaultCredentials(accessKeyId, accessKeySecret);
V4Credentials credentialsV4 = V4Credentials.createByServiceCredentials(credentials, region);
CredentialsProvider provider = new DefaultCredentialProvider(credentialsV4);
// Create a timeseries client instance.
client = new TimeseriesClient(endpoint, provider, instanceName, null, new ResourceManager(null, null));
// List all timeseries tables.
ListTimeseriesTableResponse listTimeseriesTableResponse = client.listTimeseriesTable();
// Print the list of timeseries tables.
System.out.println("Found " + listTimeseriesTableResponse.getTimeseriesTableNames().size() + " timeseries tables in instance '" + instanceName + "':");
listTimeseriesTableResponse.getTimeseriesTableNames().forEach(System.out::println);
} catch (Exception e) {
System.err.println("Failed to list timeseries tables. Details:");
e.printStackTrace();
} finally {
// Shut down the client.
if (client != null) {
client.shutdown();
}
}
}
}
Configuration du client
Le SDK Tablestore pour Java prend en charge les clients synchrones et asynchrones. Le client asynchrone offre un débit plus élevé pour les charges de travail concurrentes.
Client asynchrone
Le client asynchrone utilise des callbacks pour traiter les résultats sans bloquer les threads.
Modèle à colonnes larges
import com.alicloud.openservices.tablestore.AsyncClient;
import com.alicloud.openservices.tablestore.TableStoreCallback;
import com.alicloud.openservices.tablestore.core.ResourceManager;
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.ListTableRequest;
import com.alicloud.openservices.tablestore.model.ListTableResponse;
import java.util.concurrent.*;
public class AsyncClientV4 {
public static void main(String[] args) {
// Obtain access credentials from environment variables. You must configure TABLESTORE_ACCESS_KEY_ID and TABLESTORE_ACCESS_KEY_SECRET.
final String accessKeyId = System.getenv("TABLESTORE_ACCESS_KEY_ID");
final String accessKeySecret = System.getenv("TABLESTORE_ACCESS_KEY_SECRET");
// TODO: Modify the following configurations as needed.
final String region = "cn-hangzhou"; // Specify the region ID of the instance, for example, "cn-hangzhou".
final String instanceName = "n01k********"; // Specify the instance name.
final String endpoint = "https://n01k********.cn-hangzhou.ots.aliyuncs.com"; // Specify the instance endpoint.
AsyncClient client = null;
try {
// Construct V4 signature credentials.
DefaultCredentials credentials = new DefaultCredentials(accessKeyId, accessKeySecret);
V4Credentials credentialsV4 = V4Credentials.createByServiceCredentials(credentials, region);
CredentialsProvider provider = new DefaultCredentialProvider(credentialsV4);
// Create an asynchronous client instance.
client = new AsyncClient(endpoint, provider, instanceName, null, new ResourceManager(null, null));
// Use CompletableFuture for asynchronous processing.
CompletableFuture<ListTableResponse> future = new CompletableFuture<>();
// Process the asynchronous result in the callback.
client.listTable(new TableStoreCallback<ListTableRequest, ListTableResponse>() {
@Override
public void onCompleted(ListTableRequest req, ListTableResponse res) {
System.out.println("Asynchronous request completed successfully.");
future.complete(res); // Complete the Future when the asynchronous operation is successful.
}
@Override
public void onFailed(ListTableRequest req, Exception ex) {
System.err.println("Asynchronous request failed.");
future.completeExceptionally(ex); // Complete the Future with an exception when the asynchronous operation fails.
}
});
System.out.println("Asynchronous listTable request sent. Waiting for result...");
// Block and wait for the result, and set a timeout.
// In practice, continue to execute other non-blocking tasks or pass the future to other processes.
ListTableResponse response = future.get(5, TimeUnit.SECONDS);
// Process the successful result in the main thread.
System.out.println("Found " + response.getTableNames().size() + " data tables in instance '" + instanceName + "':");
response.getTableNames().forEach(System.out::println);
} catch (Exception e) {
System.err.println("Failed to list data tables. Details:");
e.printStackTrace();
} finally {
// Shut down the client.
if (client != null) {
client.shutdown();
}
}
}
}
Modèle de séries temporelles
import com.alicloud.openservices.tablestore.AsyncTimeseriesClient;
import com.alicloud.openservices.tablestore.TableStoreCallback;
import com.alicloud.openservices.tablestore.core.ResourceManager;
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.timeseries.ListTimeseriesTableRequest;
import com.alicloud.openservices.tablestore.model.timeseries.ListTimeseriesTableResponse;
import java.util.concurrent.*;
public class TimeseriesAsyncClientV4 {
public static void main(String[] args) {
// Obtain access credentials from environment variables. You must configure TABLESTORE_ACCESS_KEY_ID and TABLESTORE_ACCESS_KEY_SECRET.
final String accessKeyId = System.getenv("TABLESTORE_ACCESS_KEY_ID");
final String accessKeySecret = System.getenv("TABLESTORE_ACCESS_KEY_SECRET");
// TODO: Modify the following configurations as needed.
final String region = "cn-hangzhou"; // Specify the region ID of the instance, for example, "cn-hangzhou".
final String instanceName = "n01k********"; // Specify the instance name.
final String endpoint = "https://n01k********.cn-hangzhou.ots.aliyuncs.com"; // Specify the instance endpoint.
AsyncTimeseriesClient client = null;
try {
// Construct V4 signature credentials.
DefaultCredentials credentials = new DefaultCredentials(accessKeyId, accessKeySecret);
V4Credentials credentialsV4 = V4Credentials.createByServiceCredentials(credentials, region);
CredentialsProvider provider = new DefaultCredentialProvider(credentialsV4);
// Create an asynchronous timeseries client instance.
client = new AsyncTimeseriesClient(endpoint, provider, instanceName, null, new ResourceManager(null, null));
// Use CompletableFuture for asynchronous processing.
CompletableFuture<ListTimeseriesTableResponse> future = new CompletableFuture<>();
// Process the asynchronous result in the callback.
client.listTimeseriesTable(new TableStoreCallback<ListTimeseriesTableRequest, ListTimeseriesTableResponse>() {
@Override
public void onCompleted(ListTimeseriesTableRequest req, ListTimeseriesTableResponse res) {
System.out.println("Asynchronous request completed successfully.");
future.complete(res); // Complete the Future when the asynchronous operation is successful.
}
@Override
public void onFailed(ListTimeseriesTableRequest req, Exception ex) {
System.err.println("Asynchronous request failed.");
future.completeExceptionally(ex); // Complete the Future with an exception when the asynchronous operation fails.
}
});
System.out.println("Asynchronous listTimeseriesTable request sent. Waiting for result...");
// Block and wait for the result, and set a timeout.
// In a real-world application, you can continue to execute other non-blocking tasks or pass the future to other processes.
ListTimeseriesTableResponse response = future.get(5, TimeUnit.SECONDS);
// Process the successful result in the main thread.
if (response.getTimeseriesTableNames() != null) {
System.out.println("Found " + response.getTimeseriesTableNames().size() + " timeseries tables in instance '" + instanceName + "':");
response.getTimeseriesTableNames().forEach(System.out::println);
}
} catch (Exception e) {
System.err.println("Failed to list timeseries tables. Details:");
e.printStackTrace();
} finally {
// Shut down the client.
if (client != null) {
client.shutdown();
}
}
}
}
Version de signature
Les signatures V4, disponibles depuis la version 5.16.1 du SDK, utilisent un algorithme de chiffrement et un mécanisme de signature plus robustes pour améliorer la sécurité. Effectuez la mise à niveau vers V4 si possible. Le code suivant illustre l'initialisation avec une signature V2.
Modèle à colonnes larges
Synchrone
import com.alicloud.openservices.tablestore.SyncClient;
import com.alicloud.openservices.tablestore.core.ResourceManager;
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.model.ListTableResponse;
public class SyncClientV2 {
public static void main(String[] args) {
// Obtain access credentials from environment variables. You must configure TABLESTORE_ACCESS_KEY_ID and TABLESTORE_ACCESS_KEY_SECRET.
final String accessKeyId = System.getenv("TABLESTORE_ACCESS_KEY_ID");
final String accessKeySecret = System.getenv("TABLESTORE_ACCESS_KEY_SECRET");
// TODO: Modify the following configurations as needed.
final String instanceName = "n01k********"; // Specify the instance name.
final String endpoint = "https://n01k********.cn-hangzhou.ots.aliyuncs.com"; // Specify the instance endpoint.
SyncClient client = null;
try {
// Construct V2 signature credentials.
DefaultCredentials credentials = new DefaultCredentials(accessKeyId, accessKeySecret);
CredentialsProvider provider = new DefaultCredentialProvider(credentials);
// Create a client instance.
client = new SyncClient(endpoint, provider, instanceName, null, new ResourceManager(null, null));
// List all data tables.
ListTableResponse listTableResponse = client.listTable();
// Print the list of data tables.
System.out.println("Found " + listTableResponse.getTableNames().size() + " data tables in instance '" + instanceName + "':");
listTableResponse.getTableNames().forEach(System.out::println);
} catch (Exception e) {
System.err.println("Failed to list data tables. Details:");
e.printStackTrace();
} finally {
// Shut down the client.
if (client != null) {
client.shutdown();
}
}
}
}
Asynchrone
import com.alicloud.openservices.tablestore.AsyncClient;
import com.alicloud.openservices.tablestore.TableStoreCallback;
import com.alicloud.openservices.tablestore.core.ResourceManager;
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.model.ListTableRequest;
import com.alicloud.openservices.tablestore.model.ListTableResponse;
import java.util.concurrent.*;
public class AsyncClientV2 {
public static void main(String[] args) {
// Obtain access credentials from environment variables. You must configure TABLESTORE_ACCESS_KEY_ID and TABLESTORE_ACCESS_KEY_SECRET.
final String accessKeyId = System.getenv("TABLESTORE_ACCESS_KEY_ID");
final String accessKeySecret = System.getenv("TABLESTORE_ACCESS_KEY_SECRET");
// TODO: Modify the following configurations as needed.
final String instanceName = "n01k********"; // Specify the instance name.
final String endpoint = "https://n01k********.cn-hangzhou.ots.aliyuncs.com"; // Specify the instance endpoint.
AsyncClient client = null;
try {
// Construct V2 signature credentials.
DefaultCredentials credentials = new DefaultCredentials(accessKeyId, accessKeySecret);
CredentialsProvider provider = new DefaultCredentialProvider(credentials);
// Create an asynchronous client instance.
client = new AsyncClient(endpoint, provider, instanceName, null, new ResourceManager(null, null));
// Use CompletableFuture for asynchronous processing.
CompletableFuture<ListTableResponse> future = new CompletableFuture<>();
// Process the asynchronous result in the callback.
client.listTable(new TableStoreCallback<ListTableRequest, ListTableResponse>() {
@Override
public void onCompleted(ListTableRequest req, ListTableResponse res) {
System.out.println("Asynchronous request completed successfully.");
future.complete(res); // Complete the Future when the asynchronous operation is successful.
}
@Override
public void onFailed(ListTableRequest req, Exception ex) {
System.err.println("Asynchronous request failed.");
future.completeExceptionally(ex); // Complete the Future with an exception when the asynchronous operation fails.
}
});
System.out.println("Asynchronous listTable request sent. Waiting for result...");
// Block and wait for the result, and set a timeout.
// In practice, continue to execute other non-blocking tasks or pass the future to other processes.
ListTableResponse response = future.get(5, TimeUnit.SECONDS);
// Process the successful result in the main thread.
System.out.println("Found " + response.getTableNames().size() + " data tables in instance '" + instanceName + "':");
response.getTableNames().forEach(System.out::println);
} catch (Exception e) {
System.err.println("Failed to list data tables. Details:");
e.printStackTrace();
} finally {
// Shut down the client.
if (client != null) {
client.shutdown();
}
}
}
}
Modèle de séries temporelles
Synchrone
import com.alicloud.openservices.tablestore.TimeseriesClient;
import com.alicloud.openservices.tablestore.core.ResourceManager;
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.model.timeseries.ListTimeseriesTableResponse;
public class TimeseriesSyncClientV2 {
public static void main(String[] args) {
// Obtain access credentials from environment variables. You must configure TABLESTORE_ACCESS_KEY_ID and TABLESTORE_ACCESS_KEY_SECRET.
final String accessKeyId = System.getenv("TABLESTORE_ACCESS_KEY_ID");
final String accessKeySecret = System.getenv("TABLESTORE_ACCESS_KEY_SECRET");
// TODO: Modify the following configurations as needed.
final String instanceName = "n01k********"; // Specify the instance name.
final String endpoint = "https://n01k********.cn-hangzhou.ots.aliyuncs.com"; // Specify the instance endpoint.
TimeseriesClient client = null;
try {
// Construct V2 signature credentials.
DefaultCredentials credentials = new DefaultCredentials(accessKeyId, accessKeySecret);
CredentialsProvider provider = new DefaultCredentialProvider(credentials);
// Create a timeseries client instance.
client = new TimeseriesClient(endpoint, provider, instanceName, null, new ResourceManager(null, null));
// List all timeseries tables.
ListTimeseriesTableResponse listTimeseriesTableResponse = client.listTimeseriesTable();
// Print the list of timeseries tables.
System.out.println("Found " + listTimeseriesTableResponse.getTimeseriesTableNames().size() + " timeseries tables in instance '" + instanceName + "':");
listTimeseriesTableResponse.getTimeseriesTableNames().forEach(System.out::println);
} catch (Exception e) {
System.err.println("Failed to list timeseries tables. Details:");
e.printStackTrace();
} finally {
// Shut down the client.
if (client != null) {
client.shutdown();
}
}
}
}
Asynchrone
import com.alicloud.openservices.tablestore.AsyncTimeseriesClient;
import com.alicloud.openservices.tablestore.TableStoreCallback;
import com.alicloud.openservices.tablestore.core.ResourceManager;
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.model.timeseries.ListTimeseriesTableRequest;
import com.alicloud.openservices.tablestore.model.timeseries.ListTimeseriesTableResponse;
import java.util.concurrent.*;
public class TimeseriesAsyncClientV2 {
public static void main(String[] args) {
// Obtain access credentials from environment variables. You must configure TABLESTORE_ACCESS_KEY_ID and TABLESTORE_ACCESS_KEY_SECRET.
final String accessKeyId = System.getenv("TABLESTORE_ACCESS_KEY_ID");
final String accessKeySecret = System.getenv("TABLESTORE_ACCESS_KEY_SECRET");
// TODO: Modify the following configurations as needed.
final String instanceName = "n01k********"; // Specify the instance name.
final String endpoint = "https://n01k********.cn-hangzhou.ots.aliyuncs.com"; // Specify the instance endpoint.
AsyncTimeseriesClient client = null;
try {
// Construct V2 signature credentials.
DefaultCredentials credentials = new DefaultCredentials(accessKeyId, accessKeySecret);
CredentialsProvider provider = new DefaultCredentialProvider(credentials);
// Create an asynchronous timeseries client instance.
client = new AsyncTimeseriesClient(endpoint, provider, instanceName, null, new ResourceManager(null, null));
// Use CompletableFuture for asynchronous processing.
CompletableFuture<ListTimeseriesTableResponse> future = new CompletableFuture<>();
// Process the asynchronous result in the callback.
client.listTimeseriesTable(new TableStoreCallback<ListTimeseriesTableRequest, ListTimeseriesTableResponse>() {
@Override
public void onCompleted(ListTimeseriesTableRequest req, ListTimeseriesTableResponse res) {
System.out.println("Asynchronous request completed successfully.");
future.complete(res); // Complete the Future when the asynchronous operation is successful.
}
@Override
public void onFailed(ListTimeseriesTableRequest req, Exception ex) {
System.err.println("Asynchronous request failed.");
future.completeExceptionally(ex); // Complete the Future with an exception when the asynchronous operation fails.
}
});
System.out.println("Asynchronous listTimeseriesTable request sent. Waiting for result...");
// Block and wait for the result, and set a timeout.
// In practice, continue to execute other non-blocking tasks or pass the future to other processes.
ListTimeseriesTableResponse response = future.get(5, TimeUnit.SECONDS);
// Process the successful result in the main thread.
if (response.getTimeseriesTableNames() != null) {
System.out.println("Found " + response.getTimeseriesTableNames().size() + " timeseries tables in instance '" + instanceName + "':");
response.getTimeseriesTableNames().forEach(System.out::println);
}
} catch (Exception e) {
System.err.println("Failed to list timeseries tables. Details:");
e.printStackTrace();
} finally {
// Shut down the client.
if (client != null) {
client.shutdown();
}
}
}
}
Compatibilité des versions
La dernière version est la 5.x.x. Compatibilité avec les versions antérieures :
Les SDK de la série 4.x.x sont compatibles.
SDK Tablestore pour Java V2.x.x : incompatible
FAQ
Que faire en cas de conflit de dépendances de bibliothèque PB lors de l'utilisation du SDK ?
Si l'erreur java.lang.ExceptionInInitializerError se produit, votre projet présente probablement un conflit de dépendances lié à la bibliothèque Protocol Buffers (PB). Résolvez ce problème en suivant les instructions de la rubrique Conflits de bibliothèques PB lors de l'utilisation du SDK Java.
Que faire en cas d'exception « Signature mismatch » lors de l'utilisation du SDK ?
L'exception suivante se produit :
Error Code: OTSAuthFailed, Message: Signature mismatch., RequestId: 0005f55a-xxxx-xxxx-xxxx-xxxxxxxxxxxx, TraceId: 10b0f0e0-xxxx-xxxx-xxxx-xxxxxxxxxxxx, HttpStatus: 403
Cause : L'AccessKey ID ou l'AccessKey secret est incorrect.
Solution : Fournissez l'AccessKey ID et l'AccessKey secret corrects.
Que faire en cas d'exception « Request denied by instance ACL policies » lors de l'utilisation du SDK ?
Le SDK peut renvoyer l'erreur Request denied by instance ACL policies :
[ErrorCode]:OTSAuthFailed, [Message]:Request denied by instance ACL policies., [RequestId]:XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX, [TraceId]:XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX, [HttpStatus:]403
Cause : Le type de réseau du client ne correspond pas à la politique d'accès de l'instance. Par exemple, l'instance n'autorise pas l'accès via Internet.
-
Solution : L'accès via le réseau public est désactivé par défaut. Pour l'activer :
Dans la console Tablestore, cliquez sur l'instance cible.
Cliquez sur Network Management. Pour Allowed Network Type, sélectionnez Internet, puis cliquez sur Settings.
Que faire en cas d'exception « Request denied because this instance can only be accessed from the binded VPC » lors de l'utilisation du SDK ?
Le SDK peut renvoyer l'erreur Request denied because this instance can only be accessed from the bound VPC :
[ErrorCode]:OTSAuthFailed, [Message]:Request denied because this instance can only be accessed from the binded VPC., [RequestId]:XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX, [TraceId]:XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX, [HttpStatus:]403
Cause : Le type d'accès de l'instance est défini sur Bound VPCs Only ou Tablestore Console or Bound VPCs, mais le client ne se trouve pas dans un VPC associé ou n'accède pas à Tablestore via un endpoint VPC.
-
Solution : Autorisez l'accès via Internet ou associez un VPC et connectez le client depuis celui-ci :
Dans la console Tablestore, cliquez sur l'instance cible.
Cliquez sur . Sélectionnez un VPC ID et un VSwitch, saisissez un VPC Name, puis cliquez sur OK.
Que faire en cas d'exception SocketTimeoutException lors de l'utilisation du SDK ?
Les délais d'attente côté client peuvent résulter de pannes réseau, de jitter, d'une charge serveur élevée ou d'un garbage collection complet (full GC). Vérifiez la connectivité réseau, la latence du serveur et l'activité du garbage collection. Consultez la rubrique Que faire en cas d'exception SocketTimeoutException lors de l'accès à Tablestore avec le SDK Java ?.
Que faire en cas d'exception « The access key id is invalid » lors de l'utilisation du SDK ?
L'exception suivante se produit lors de l'utilisation du SDK :
java.lang.IllegalArgumentException: The access key id is invalid:xxx.
Cause : L'AccessKey, qui comprend l'AccessKey ID et l'AccessKey secret, est incorrect ou contient un caractère non valide.
Solution : Fournissez les informations AccessKey correctes.
Que faire en cas d'exception « java.lang.IllegalStateException: Request cannot be executed; I/O reactor status: STOPPED » lors de l'utilisation du SDK ?
L'exception suivante se produit lors de l'utilisation du SDK :
java.lang.IllegalStateException: Request cannot be executed; I/O reactor status: STOPPED
Cause : La méthode
shutDowna déjà été appelée, ce qui a fermé les réacteurs I/O du client.Solution : Après avoir appelé
shutDown, réinitialisez le client. Un client ayant subi unshutDownne peut pas traiter de nouvelles requêtes.