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 du client HTTP
Par défaut, AWS SDK pour Kotlin utilise un client HTTP basé sur OkHttp
Avertissement
Quel que soit le moteur HTTP que vous utilisez, les autres dépendances de votre projet peuvent avoir des dépendances transitives qui entrent en conflit avec la version du moteur spécifique requise par le SDK. En particulier, les frameworks tels que Spring Boot sont connus pour gérer les dépendances OkHttp et s'appuyer sur des versions plus anciennes que le SDK. Veuillez consulter Comment résoudre les conflits de dépendance ? pour plus d'informations.
Note
Par défaut, chaque client de service utilise sa propre copie d'un client HTTP. Si vous utilisez plusieurs services dans votre application, vous souhaiterez peut-être créer un seul client HTTP et le partager entre tous les clients de service.
Configuration de base
Lorsque vous configurez un client de service, vous pouvez configurer le type de moteur par défaut. Le SDK gère le moteur client HTTP qui en résulte et le ferme automatiquement lorsqu'il n'est plus nécessaire.
L'exemple suivant montre la configuration d'un client HTTP lors de l'initialisation d'un client DynamoDB.
Importations
import aws.sdk.kotlin.services.dynamodb.DynamoDbClient import kotlin.time.Duration.Companion.seconds
Code
DynamoDbClient { region = "us-east-2" httpClient { maxConcurrency = 64u connectTimeout = 10.seconds } }.use { ddb -> // Perform some actions with Amazon DynamoDB. }
Configuration avancée
La configuration HTTP par défaut convient à la plupart des cas d'utilisation. Pour certains cas d'utilisation avancés, tels que les environnements à haut débit, les options de configuration avancées suivantes fournissent des fonctionnalités et des capacités supplémentaires :
Spécifier un type de moteur HTTP
Pour spécifier un type de moteur HTTP autre que celui par défaut, ou pour personnaliser la configuration spécifique à un type de moteur HTTP particulier, vous pouvez transmettre un paramètre supplémentaire httpClient qui indique le type de moteur.
L'exemple suivant indique OkHttpEnginece que vous pouvez utiliser pour configurer la maxConcurrencyPerHostpropriété.
Importations
import aws.sdk.kotlin.services.dynamodb.DynamoDbClient import aws.smithy.kotlin.runtime.http.engine.okhttp.OkHttpEngine
Code
DynamoDbClient { region = "us-east-2" httpClient(OkHttpEngine) { // The first parameter specifies the HTTP engine type. // The following parameter is generic HTTP configuration available in any engine type. maxConcurrency = 64u // The following parameter is OkHttp-specific configuration. maxConcurrencyPerHost = 32u } }.use { ddb -> // Perform some actions with Amazon DynamoDB. }
Les valeurs possibles pour le type de moteur sont OkHttpEngine OkHttp4Engine, et CrtHttpEngine.
Pour utiliser des paramètres de configuration spécifiques à un moteur HTTP, vous devez ajouter le moteur en tant que dépendance au moment de la compilation. Pour leOkHttpEngine, vous ajoutez la dépendance suivante à l'aide de Gradle.
(Vous pouvez accéder au X.Y.Z lien pour voir la dernière version disponible.)
implementation(platform("aws.smithy.kotlin:bom:X.Y.Z")) implementation("aws.smithy.kotlin:http-client-engine-okhttp")
Pour leCrtHttpEngine, ajoutez la dépendance suivante.
implementation(platform("aws.smithy.kotlin:bom:X.Y.Z")) implementation("aws.smithy.kotlin:http-client-engine-crt")
Utilisation de la OkHttp4Engine
Utilisez le OkHttp4Engine si vous ne pouvez pas utiliser la valeur par défautOkHttpEngine. Le GitHub référentiel smithy-kotlinOkHttp4Engine
Utiliser un client HTTP explicite
Lorsque vous utilisez un client HTTP explicite, vous êtes responsable de sa durée de vie, y compris de sa fermeture lorsque vous n'en avez plus besoin. Un client HTTP doit vivre au moins aussi longtemps que n'importe quel client de service qui l'utilise.
L'exemple de code suivant montre le code qui permet au client HTTP de rester actif lorsqu'DynamoDbClientil est actif. La usefonction s'assure que le client HTTP se ferme correctement.
Importations
import aws.sdk.kotlin.services.dynamodb.DynamoDbClient import aws.smithy.kotlin.runtime.http.engine.okhttp.OkHttpEngine import kotlin.time.Duration.Companion.seconds
Code
OkHttpEngine { maxConcurrency = 64u connectTimeout = 10.seconds }.use { okHttpClient -> DynamoDbClient { region = "us-east-2" httpClient = okHttpClient }.use { ddb -> { // Perform some actions with Amazon DynamoDB. } } }
Surveillance des connexions inactives
OkHttpEnginefournit l'option connectionIdlePollingIntervalde configuration pour surveiller les connexions inactives en vue de leur fermeture à distance. Cette fonctionnalité détecte les connexions fermées par les services qui se trouvent toujours dans le pool de connexions, évitant ainsi les erreurs lors des demandes suivantes.
Lorsqu'il connectionIdlePollingInterval est défini sur une valeur non nulle, le moteur interroge les connexions qui sont renvoyées au pool de connexions. Le processus d'interrogation bloque les lectures avec le délai d'expiration du socket défini sur l'intervalle spécifié. L'interrogation est automatiquement annulée lorsque le moteur acquiert la connexion depuis le pool ou lorsque la connexion est expulsée et fermée.
Lorsque cette valeur est null (valeur par défaut), le sondage est désactivé. Les connexions inactives du pool qui sont fermées à distance peuvent rencontrer des erreurs lorsqu'elles sont acquises pour des appels ultérieurs.
Note
Comme la boucle d'interrogation utilise des lectures bloquantes, les appels au moteur pour établir ou fermer une connexion peuvent être retardés d'un intervalle égal à l'connectionIdlePollingIntervalintervalle. Le choix d'une valeur faible pour l'intervalle signifie que le SDK établira des connexions plus rapidement, au détriment d'une utilisation plus importante des ressources inactives.
Importations
import aws.sdk.kotlin.services.s3.S3Client import aws.smithy.kotlin.runtime.http.engine.okhttp.OkHttpEngine import kotlin.time.Duration.Companion.milliseconds
Code
S3Client.fromEnvironment { httpEngine(OkHttpEngine) { connectionIdlePollingInterval = 50.milliseconds } }.use { s3 -> // Use the Amazon S3 client }