Configuración del cliente HTTP - AWS SDK para Kotlin

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Configuración del cliente HTTP

De forma predeterminada, AWS SDK para Kotlin utiliza un cliente HTTP basado en OkHttp. Puede anular el cliente HTTP y su configuración proporcionando un cliente configurado de forma explícita.

aviso

Independientemente del motor HTTP que utilices, es posible que otras dependencias de tu proyecto tengan dependencias transitivas que entren en conflicto con la versión específica del motor que requiere el SDK. En concreto, se sabe que los marcos como Spring Boot gestionan las dependencias OkHttp y se basan en versiones anteriores al SDK. Consulte ¿Cómo resuelvo los conflictos de dependencia? para obtener más información.

nota

De forma predeterminada, cada cliente de servicio usa su propia copia de un cliente HTTP. Si utiliza varios servicios en la aplicación, puede que desee crear un único cliente HTTP y compartirlo entre todos los clientes del servicio.

Configuración básica

Al configurar un cliente de servicio, puede configurar el tipo de motor predeterminado. El SDK administra el motor de cliente HTTP resultante y lo cierra automáticamente cuando ya no es necesario.

El siguiente ejemplo muestra la configuración de un cliente HTTP durante la inicialización de un cliente de DynamoDB.

Importaciones

import aws.sdk.kotlin.services.dynamodb.DynamoDbClient import kotlin.time.Duration.Companion.seconds

Código

DynamoDbClient { region = "us-east-2" httpClient { maxConcurrency = 64u connectTimeout = 10.seconds } }.use { ddb -> // Perform some actions with Amazon DynamoDB. }

Configuración avanzada

La configuración HTTP predeterminada es adecuada para la mayoría de los casos de uso. Para algunos casos de uso avanzados, como los entornos de alto rendimiento, las siguientes opciones de configuración avanzada ofrecen funciones y capacidades adicionales:

Especifique un tipo de motor HTTP

Para especificar un tipo de motor HTTP no predeterminado o para personalizar la configuración específica de un tipo de motor HTTP concreto, puede pasar un parámetro adicional httpClient que especifique el tipo de motor.

En el siguiente ejemplo, se especifica lo OkHttpEngineque se puede usar para configurar la maxConcurrencyPerHostpropiedad.

Importaciones

import aws.sdk.kotlin.services.dynamodb.DynamoDbClient import aws.smithy.kotlin.runtime.http.engine.okhttp.OkHttpEngine

Código

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. }

Los valores posibles para el tipo de motor son OkHttpEngine OkHttp4Engine, y CrtHttpEngine.

Para usar los parámetros de configuración específicos de un motor HTTP, debe agregar el motor como una dependencia en tiempo de compilación. Para elloOkHttpEngine, agrega la siguiente dependencia mediante Gradle.

(Puedes navegar hasta el X.Y.Z enlace para ver la última versión disponible).

implementation(platform("aws.smithy.kotlin:bom:X.Y.Z")) implementation("aws.smithy.kotlin:http-client-engine-okhttp")

Para elCrtHttpEngine, añada la siguiente dependencia.

implementation(platform("aws.smithy.kotlin:bom:X.Y.Z")) implementation("aws.smithy.kotlin:http-client-engine-crt")

Utilizar OkHttp4Engine

Use la opción predeterminada OkHttp4Engine si no puede usar la opción predeterminadaOkHttpEngine. El GitHub repositorio smithy-kotlin tiene información sobre cómo configurar y usar el. OkHttp4Engine

Utilice un cliente HTTP explícito

Cuando utilizas un cliente HTTP explícito, eres responsable de su vida útil, incluido el cierre cuando ya no lo necesites. Un cliente HTTP debe durar al menos tanto como cualquier cliente de servicio que lo utilice.

El siguiente ejemplo de código muestra el código que mantiene activo al cliente HTTP mientras DynamoDbClient está activo. La usefunción se asegura de que el cliente HTTP se cierre correctamente.

Importaciones
import aws.sdk.kotlin.services.dynamodb.DynamoDbClient import aws.smithy.kotlin.runtime.http.engine.okhttp.OkHttpEngine import kotlin.time.Duration.Companion.seconds
Código
OkHttpEngine { maxConcurrency = 64u connectTimeout = 10.seconds }.use { okHttpClient -> DynamoDbClient { region = "us-east-2" httpClient = okHttpClient }.use { ddb -> { // Perform some actions with Amazon DynamoDB. } } }

Supervisión de conexiones inactivas

OkHttpEngineofrece la opción connectionIdlePollingIntervalde configuración para supervisar las conexiones inactivas para su cierre remoto. Esta función detecta cuando los servicios tienen conexiones cerradas que aún se encuentran en el grupo de conexiones, lo que evita errores en las solicitudes posteriores.

Cuando connectionIdlePollingInterval se establece en un valor no nulo, el motor sondea las conexiones que se devuelven al conjunto de conexiones. El proceso de sondeo bloquea las lecturas con el tiempo de espera del socket establecido en el intervalo especificado. El sondeo se cancela automáticamente cuando el motor adquiere la conexión del grupo o cuando la conexión se desaloja y se cierra.

Si este valor es null (el predeterminado), el sondeo se desactiva. Las conexiones inactivas del grupo que se cierran de forma remota pueden producir errores cuando se adquieren para llamadas posteriores.

nota

Como el ciclo de sondeo utiliza lecturas bloqueantes, las llamadas del motor para adquirir o cerrar una conexión pueden demorarse tanto como el connectionIdlePollingInterval intervalo. Si se elige un valor bajo para el intervalo, el SDK adquirirá las conexiones más rápido, a costa de un mayor uso de los recursos inactivos.

Importaciones

import aws.sdk.kotlin.services.s3.S3Client import aws.smithy.kotlin.runtime.http.engine.okhttp.OkHttpEngine import kotlin.time.Duration.Companion.milliseconds

Código

S3Client.fromEnvironment { httpEngine(OkHttpEngine) { connectionIdlePollingInterval = 50.milliseconds } }.use { s3 -> // Use the Amazon S3 client }