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.
Configurar clientes AWS HTTP basados en CRT
Los clientes HTTP AWS basados en CRT incluyen los clientes síncronos y asíncronos. AwsCrtHttpClientAwsCrtAsyncHttpClient
-
Tiempo de inicio del SDK más rápido
-
Ocupación de menos espacio de memoria
-
Tiempo de latencia reducido
-
Administración del estado de conexión
-
equilibrio de carga de DNS
AWS Componentes basados en CRT en el SDK
Los clientes HTTP AWS basados en CRT, que se describen en este tema, y el cliente S3 AWS basado en CRT son componentes diferentes del SDK.
Los clientes HTTP basados en CRT de AWS síncronos y asíncronos son implementaciones e interfaces de cliente HTTP de SDK y se utilizan para la comunicación HTTP general. Son alternativas a los otros clientes HTTP síncronos o asíncronos del SDK con ventajas adicionales.
El cliente S3 AWS basado en CRT es una implementación de la AsyncClient interfaz S3S3AsyncClient
basada en Java y ofrece varias ventajas.
Si bien ambos componentes utilizan bibliotecas del AWS Common Runtime, los clientes HTTP AWS basados en CRT no utilizan la biblioteca aws-c-s 3
Acceda a los clientes HTTP basados en CRT AWS
Antes de poder usar los clientes HTTP AWS basados en CRT, agrega el aws-crt-client
artefacto con una versión mínima de 2.22.0 a las dependencias de tu proyecto.
Usa una de las siguientes opciones para configurar tu archivo Maven. pom.xml
nota
Puede optar por utilizar la opción jar específica de la plataforma si necesita reducir el tamaño de las dependencias del tiempo de ejecución, por ejemplo, si su aplicación se ejecuta en una función. AWS Lambda
De forma predeterminada, aws-crt-client
utiliza un supercontenedor de artefactos AWS CRT que contiene archivos binarios para varias plataformas, incluidas Linux, Windows y 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>
*Sustituya la versión que se muestra en rojo por la versión del SDK de Java que desee utilizar. Encuentra lo último en Maven Central
Utilice y configure un cliente HTTP AWS basado en CRT
Puede configurar un cliente HTTP AWS basado en CRT junto con la creación de un cliente de servicio, o puede configurar una sola instancia para compartirla entre varios clientes de servicio.
Con cualquiera de estos enfoques, se utiliza un generador para configurar las propiedades de la instancia
Práctica recomendada: dedicar una instancia de a un cliente de servicio
Si necesitas configurar una instancia de un cliente HTTP AWS basado en CRT, te recomendamos que dediques la instancia y la compiles junto con el cliente de servicio. Puede hacerlo con el método httpClientBuilder
del generador del cliente del servicio. De esta forma, el SDK administra el ciclo de vida del cliente HTTP, lo que ayuda a evitar posibles pérdidas de memoria si la instancia del cliente HTTP AWS basada en CRT no se cierra cuando ya no es necesaria.
En el siguiente ejemplo, se crea un cliente de servicio S3 y se configura un cliente HTTP AWS basado en CRT con valores y valores. connectionTimeout
maxConcurrency
Importaciones
import software.amazon.awssdk.http.crt.AwsCrtHttpClient;
import software.amazon.awssdk.services.s3.S3Client;
import java.time.Duration;
Código
// 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();
Enfoque alternativo: compartir una instancia
Para reducir el uso de recursos y memoria para su aplicación, puede configurar un cliente HTTP AWS basado en CRT y compartirlo entre varios clientes de servicio. El grupo de conexiones HTTP se compartirá, lo que reduce el uso de recursos.
nota
Cuando se comparte una instancia de cliente HTTP AWS basada en CRT, debe cerrarla cuando esté lista para su eliminación. El SDK no cerrará la instancia cuando el cliente del servicio esté cerrado.
El siguiente ejemplo configura una instancia de cliente HTTP AWS basada en CRT con valores y. connectionTimeout
maxConcurrency
La instancia configurada se pasa al método httpClient
del creador de cada cliente de servicio. Cuando los clientes de servicio y el cliente HTTP ya no son necesarios, se cierran de forma explícita. El cliente HTTP se cierra en último lugar.
Importaciones
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;
Código
// 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.
Establezca un cliente HTTP AWS basado en CRT como predeterminado
Puede configurar su archivo de compilación de Maven para que el SDK utilice un cliente HTTP AWS basado en CRT como cliente HTTP predeterminado para los clientes de servicio.
Para ello, añada un elemento exclusions
con las dependencias predeterminadas del cliente HTTP a cada artefacto del cliente de servicio.
En el siguiente pom.xml
ejemplo, el SDK usa un cliente HTTP AWS basado en CRT para los servicios de S3. Si el cliente de servicio de su código es un S3AsyncClient
, el SDK utiliza AwsCrtAsyncHttpClient
. Si el cliente de servicio es un S3Client, el SDK utiliza AwsCrtHttpClient
. Con esta configuración, el cliente HTTP asíncrono predeterminado basado en Netty y el HTTP síncrono predeterminado basado en Apache no están 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>
Visite el repositorio central de Maven para obtener el valor más reciente. VERSION
nota
Si se declaran varios clientes de servicio en un archivo pom.xml
, todos requieren el elemento XML exclusions
.
Utilizar una propiedad del sistema Java
Para usar los clientes HTTP AWS basados en CRT como HTTP predeterminado para su aplicación, puede establecer la propiedad del sistema Java en un valor software.amazon.awssdk.http.async.service.impl
de. software.amazon.awssdk.http.crt.AwsCrtSdkHttpService
Para configurarlo durante el inicio de la aplicación, ejecute un comando similar al siguiente.
java app.jar -Dsoftware.amazon.awssdk.http.async.service.impl=\ software.amazon.awssdk.http.crt.AwsCrtSdkHttpService
Use el siguiente fragmento de código para establecer la propiedad del sistema en el código de la aplicación.
System.setProperty("software.amazon.awssdk.http.async.service.impl",
"software.amazon.awssdk.http.crt.AwsCrtSdkHttpService");
nota
Debe añadir una dependencia al aws-crt-client
artefacto del poml.xml
archivo cuando utilice una propiedad del sistema para configurar el uso de los clientes HTTP basados en AWS CRT.
Configuración avanzada de clientes HTTP basados en CRT de AWS
Puede utilizar varios ajustes de configuración de los clientes HTTP AWS basados en CRT, como la configuración del estado de la conexión y el tiempo máximo de inactividad. Puede revisar las opciones de configuración disponiblesAwsCrtAsyncHttpClient
. Puede configurar las mismas opciones para AwsCrtHttpClient
.
Configuración del estado de conexión
Puede configurar el estado de la conexión para los clientes HTTP AWS basados en CRT mediante el connectionHealthConfiguration
método del generador de clientes HTTP.
En el siguiente ejemplo, se crea un cliente de servicio S3 que utiliza una instancia de cliente HTTP AWS basada en CRT configurada con una configuración de mantenimiento de la conexión y un tiempo máximo de inactividad para las conexiones.
Importaciones
import software.amazon.awssdk.http.crt.AwsCrtHttpClient;
import software.amazon.awssdk.services.s3.S3Client;
import java.time.Duration;
Código
// 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();
Compatibilidad con HTTP/2
El protocolo HTTP/2 aún no es compatible con los clientes HTTP AWS basados en CRT, pero está previsto que se publique en un futuro.
Mientras tanto, si utiliza clientes de servicio que requieren compatibilidad con HTTP/2, como el KinesisAsyncClient
Ejemplo de configuración proxy
El siguiente fragmento de código muestra el uso de ProxyConfiguration.Builder
Importaciones
import software.amazon.awssdk.http.SdkHttpClient;
import software.amazon.awssdk.http.crt.AwsCrtHttpClient;
import software.amazon.awssdk.http.crt.ProxyConfiguration;
Código
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();
Las propiedades del sistema Java equivalentes para la configuración del proxy se muestran en el siguiente fragmento de línea de comandos.
$ java -Dhttps.proxyHost=myproxy -Dhttps.proxyPort=1234 -Dhttps.proxyUser=username \ -Dhttps.proxyPassword=password -Dhttp.nonProxyHosts=localhost|host.example.com -cp ... App
importante
Para utilizar cualquiera de las propiedades del sistema proxy HTTPS, la propiedad scheme
debe estar configurada en código para https
. Si la propiedad del esquema no está configurada en el código, el esquema predeterminado es HTTP y el SDK solo busca las propiedades del sistema http.*
.
La configuración equivalente que usa variables de entorno es:
// 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