Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.
Configuration de clients AWS HTTP basés sur CRT
Les clients HTTP AWS basés sur le CRT incluent les clients synchrones et asynchrones. AwsCrtHttpClientAwsCrtAsyncHttpClient
-
Temps de démarrage du SDK plus rapide
-
Empreinte mémoire réduite
-
Temps de latence réduit
-
Gestion de l'état de la connexion
-
Équilibrage de charge DNS
AWS Composants du SDK basés sur le CRT
Les clients HTTP AWS CRT, décrits dans cette rubrique, et le client S3 AWS basé sur CRT sont des composants différents du SDK.
Les clients HTTP synchrones et asynchrones AWS basés sur le CRT sont des interfaces client HTTP du SDK d'implémentation et sont utilisés pour les communications HTTP générales. Ils constituent des alternatives aux autres clients HTTP synchrones ou asynchrones du SDK avec des avantages supplémentaires.
Le client S3 AWS basé sur CRT est une implémentation de l'AsyncClientinterface S3S3AsyncClient
interface et offre plusieurs avantages.
Bien que les deux composants utilisent des bibliothèques issues du AWS Common Runtime, les clients HTTP AWS basés sur CRT n'utilisent pas la bibliothèque aws-c-s 3
Accédez aux clients HTTP AWS basés sur CRT
Avant de pouvoir utiliser les clients HTTP AWS CRT, ajoutez l'aws-crt-client
artefact avec une version minimale de 2.22.0 aux dépendances de votre projet.
Utilisez l'une des options suivantes pour configurer votre pom.xml
fichier Maven.
Note
Vous pouvez choisir d'utiliser l'option jar spécifique à la plate-forme si vous devez réduire la taille des dépendances d'exécution, par exemple si votre application s'exécute dans une fonction. AWS Lambda
Par défaut, il aws-crt-client
utilise un uber-jar d'artefacts AWS CRT contenant des fichiers binaires pour plusieurs plateformes, notamment Linux, Windows et macOS.
<project>
<properties>
<aws.sdk.java.version>2.29.10*
</aws.sdk.java.version>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>software.amazon.awssdk</groupId>
<artifactId>bom</artifactId>
<version>${aws.sdk.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>software.amazon.awssdk</groupId>
<artifactId>aws-crt-client</artifactId>
</dependency>
</dependencies>
</project>
*Remplacez la version affichée en rouge par la version du SDK Java que vous souhaitez utiliser. Découvrez les dernières actualités sur Maven Central
Utiliser et configurer un client AWS HTTP CRT
Vous pouvez configurer un client HTTP AWS CRT tout en créant un client de service, ou vous pouvez configurer une instance unique à partager entre plusieurs clients de service.
Quelle que soit l'approche, vous utilisez un générateur pour configurer les propriétés
Meilleure pratique : dédier une instance à un client de service
Si vous devez configurer une instance d'un client HTTP AWS CRT, nous vous recommandons de la dédier en la créant avec le client de service. Vous pouvez le faire en utilisant la httpClientBuilder
méthode du générateur du client de service. Ainsi, le cycle de vie du client HTTP est géré par le SDK, ce qui permet d'éviter d'éventuelles fuites de mémoire si l'instance du client HTTP AWS basée sur CRT n'est pas fermée alors qu'elle n'est plus nécessaire.
L'exemple suivant crée un client de service S3 et configure un client HTTP AWS CRT avec connectionTimeout
des valeurs et. maxConcurrency
Importations
import software.amazon.awssdk.http.crt.AwsCrtHttpClient;
import software.amazon.awssdk.services.s3.S3Client;
import java.time.Duration;
Code
// Singleton: Use s3Client for all requests.
S3Client s3Client = S3Client.builder()
.httpClientBuilder(AwsCrtHttpClient
.builder()
.connectionTimeout(Duration.ofSeconds(3))
.maxConcurrency(100))
.build();
// Perform work with the s3Client.
// Requests completed: Close the s3Client.
s3Client.close();
Approche alternative : partager une instance
Pour réduire l'utilisation des ressources et de la mémoire de votre application, vous pouvez configurer un client HTTP AWS CRT et le partager entre plusieurs clients de service. Le pool de connexions HTTP sera partagé, ce qui réduit l'utilisation des ressources.
Note
Lorsqu'une instance client AWS HTTP CRT est partagée, vous devez la fermer lorsqu'elle est prête à être supprimée. Le SDK ne ferme pas l'instance lorsque le client de service est fermé.
L'exemple suivant configure une instance de client HTTP AWS CRT avec connectionTimeout
des valeurs et. maxConcurrency
L'instance configurée est transmise à la httpClient
méthode du générateur de chaque client de service. Lorsque les clients du service et le client HTTP ne sont plus nécessaires, ils sont explicitement fermés. Le client HTTP est fermé en dernier.
Importations
import software.amazon.awssdk.auth.credentials.EnvironmentVariableCredentialsProvider;
import software.amazon.awssdk.awscore.defaultsmode.DefaultsMode;
import software.amazon.awssdk.http.SdkHttpClient;
import software.amazon.awssdk.http.crt.AwsCrtHttpClient;
import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.services.dynamodb.DynamoDbClient;
import software.amazon.awssdk.services.s3.S3Client;
import java.time.Duration;
Code
// Create an AwsCrtHttpClient shared instance.
SdkHttpClient crtHttpClient = AwsCrtHttpClient.builder()
.connectionTimeout(Duration.ofSeconds(3))
.maxConcurrency(100)
.build();
// Singletons: Use the s3Client and dynamoDbClient for all requests.
S3Client s3Client = S3Client.builder()
.httpClient(crtHttpClient)
.credentialsProvider(EnvironmentVariableCredentialsProvider.crea
.defaultsMode(DefaultsMode.IN_REGION)
.region(Region.US_EAST_1)
.build();
DynamoDbClient dynamoDbClient = DynamoDbClient.builder()
.httpClient(crtHttpClient)
.credentialsProvider(EnvironmentVariableCredentialsProvider.crea
.defaultsMode(DefaultsMode.IN_REGION)
.region(Region.US_EAST_1)
.build();
// Requests completed: Close all service clients.
s3Client.close();
dynamoDbClient.close();
crtHttpClient.close(); // Explicitly close crtHttpClient.
Définir un client HTTP AWS CRT comme client par défaut
Vous pouvez configurer votre fichier de compilation Maven pour que le SDK utilise un client HTTP AWS CRT comme client HTTP par défaut pour les clients de service.
Pour ce faire, ajoutez un exclusions
élément avec les dépendances du client HTTP par défaut à chaque artefact du client de service.
Dans l'pom.xml
exemple suivant, le SDK utilise un client HTTP AWS CRT pour les services S3. Si le client de service de votre code est unS3AsyncClient
, le SDK utiliseAwsCrtAsyncHttpClient
. Si le client de service est un client S3, le SDK utilise. AwsCrtHttpClient
Avec cette configuration, le client HTTP asynchrone par défaut basé sur Netty et le HTTP synchrone basé sur Apache par défaut ne sont pas disponibles.
<project>
<properties>
<aws.sdk.version>VERSION
</aws.sdk.version>
</properties>
<dependencies>
<dependency>
<groupId>software.amazon.awssdk</groupId>
<artifactId>s3</artifactId>
<version>${aws.sdk.version}</version>
<exclusions>
<exclusion>
<groupId>software.amazon.awssdk</groupId>
<artifactId>netty-nio-client</artifactId>
</exclusion>
<exclusion>
<groupId>software.amazon.awssdk</groupId>
<artifactId>apache-client</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>software.amazon.awssdk</groupId>
<artifactId>aws-crt-client</artifactId>
</dependency>
</dependencies>
</project>
Visitez le référentiel central de Maven pour obtenir la dernière VERSION
Note
Si plusieurs clients de service sont déclarés dans un pom.xml
fichier, ils ont tous besoin de l'élément exclusions
XML.
Utiliser une propriété système Java
Pour utiliser les clients HTTP AWS CRT comme protocole HTTP par défaut pour votre application, vous pouvez définir la propriété système Java sur une valeur software.amazon.awssdk.http.async.service.impl
de. software.amazon.awssdk.http.crt.AwsCrtSdkHttpService
Pour définir lors du démarrage de l'application, exécutez une commande similaire à la suivante.
java app.jar -Dsoftware.amazon.awssdk.http.async.service.impl=\ software.amazon.awssdk.http.crt.AwsCrtSdkHttpService
Utilisez l'extrait de code suivant pour définir la propriété système dans le code de votre application.
System.setProperty("software.amazon.awssdk.http.async.service.impl",
"software.amazon.awssdk.http.crt.AwsCrtSdkHttpService");
Note
Vous devez ajouter une dépendance à l'aws-crt-client
artefact de votre poml.xml
fichier lorsque vous utilisez une propriété système pour configurer l'utilisation des clients HTTP AWS basés sur le CRT.
Configuration avancée des clients HTTP AWS basés sur CRT
Vous pouvez utiliser différents paramètres de configuration des clients HTTP AWS basés sur CRT, notamment la configuration de l'état de la connexion et le temps d'inactivité maximal. Vous pouvez consulter les options de configuration disponiblesAwsCrtAsyncHttpClient
. Vous pouvez configurer les mêmes options pourAwsCrtHttpClient
.
Configuration de l'état de la connexion
Vous pouvez configurer la configuration de l'état de la connexion pour les clients HTTP AWS basés sur CRT en utilisant la connectionHealthConfiguration
méthode du générateur de clients HTTP.
L'exemple suivant crée un client de service S3 qui utilise une instance de client HTTP AWS CRT configurée avec une configuration d'état de connexion et une durée d'inactivité maximale pour les connexions.
Importations
import software.amazon.awssdk.http.crt.AwsCrtHttpClient;
import software.amazon.awssdk.services.s3.S3Client;
import java.time.Duration;
Code
// Singleton: Use the s3Client for all requests.
S3Client s3Client = S3Client.builder()
.httpClientBuilder(AwsCrtHttpClient
.builder()
.connectionHealthConfiguration(builder -> builder
.minimumThroughputInBps(32000L)
.minimumThroughputTimeout(Duration.ofSeconds(3)))
.connectionMaxIdleTime(Duration.ofSeconds(5)))
.build();
// Perform work with s3Client.
// Requests complete: Close the service client.
s3Client.close();
Support HTTP/2
Le protocole HTTP/2 n'est pas encore pris en charge dans les clients HTTP AWS basés sur CRT, mais il est prévu pour une future version.
En attendant, si vous utilisez des clients de service qui nécessitent un support HTTP/2 tel que le KinesisAsyncClient
Exemple de configuration de proxy
L'extrait de code suivant montre l'utilisation de ProxyConfiguration.Builder
Importations
import software.amazon.awssdk.http.SdkHttpClient;
import software.amazon.awssdk.http.crt.AwsCrtHttpClient;
import software.amazon.awssdk.http.crt.ProxyConfiguration;
Code
SdkHttpClient crtHttpClient = AwsCrtHttpClient.builder()
.proxyConfiguration(ProxyConfiguration.builder()
.scheme("https")
.host("myproxy")
.port(1234)
.username("username")
.password("password")
.nonProxyHosts(Set.of("localhost", "host.example.com"))
.build())
.build();
Les propriétés système Java équivalentes pour la configuration du proxy sont indiquées dans l'extrait de ligne de commande suivant.
$ java -Dhttps.proxyHost=myproxy -Dhttps.proxyPort=1234 -Dhttps.proxyUser=username \ -Dhttps.proxyPassword=password -Dhttp.nonProxyHosts=localhost|host.example.com -cp ... App
Important
Pour utiliser l'une des propriétés du système proxy HTTPS, la scheme
propriété doit être définie dans le code surhttps
. Si la propriété du schéma n'est pas définie dans le code, le schéma est défini par défaut sur HTTP et le SDK recherche uniquement les propriétés http.*
du système.
La configuration équivalente qui utilise des variables d'environnement est la suivante :
// Set the following environment variables.
// $ export HTTPS_PROXY="https://username:password@myproxy:1234"
// $ export NO_PROXY="localhost|host.example.com"
// Set the 'useSystemPropertyValues' to false on the proxy configuration.
SdkAsyncHttpClient crtAsyncHttpClient = AwsCrtAsyncHttpClient.builder()
.proxyConfiguration(ProxyConfiguration.builder()
.scheme("https")
.useSystemPropertyValues(Boolean.FALSE)
.build())
.build();
// Run the application.
// $ java -cp ... App