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 HTTP clientes AWS CRT basados
Los HTTP clientes AWS CRT basados incluyen los clientes síncronos AwsCrtHttpClienty AwsCrtAsyncHttpClientasíncronos. Los HTTP clientes AWS CRT basados ofrecen las siguientes ventajas para el cliente: HTTP
-
Tiempo de SDK inicio más rápido
-
Ocupación de menos espacio de memoria
-
Tiempo de latencia reducido
-
Administración del estado de conexión
-
DNSequilibrio de carga
AWS CRTcomponentes basados en el SDK
Los HTTPclientes AWS CRT basados, que se describen en este tema, y el cliente S3 AWS CRT basado son componentes diferentes delSDK.
Los HTTPclientes síncronos y asíncronos son interfaces AWS CRT de SDK HTTP cliente de implementaciones y se utilizan para la comunicación general. HTTP Son alternativas a los otros clientes síncronos o HTTP asíncronos con beneficios adicionales. SDK
El cliente S3 AWS CRT basado es una implementación de la AsyncClient interfaz S3 y se utiliza para trabajar con el servicio Amazon S3. Es una alternativa a la implementación de la interfaz S3AsyncClient
basada en Java y ofrece varias ventajas.
Si bien ambos componentes utilizan bibliotecas del AWS Common Runtime, los HTTP clientes AWS CRT basados no utilizan la biblioteca aws-c-s 3 y no admiten las API funciones de carga multiparte de S3. El cliente AWS CRT basado en S3, por el contrario, se creó específicamente para admitir las funciones de carga multiparte de S3. API
Acceda a los clientes basados AWS CRT HTTP
Antes de poder usar los HTTP clientes AWS CRT basados, 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
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
- Uber-jar option
-
De forma predeterminada, aws-crt-client
utiliza un supercontenedor de AWS CRT artefactos 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 de Java SDK que desee utilizar. Encuentra la última versión en Maven Central.
- Platform-specific jar option
-
Para restringir el tiempo de ejecución de Java a la versión de la AWS CRT biblioteca específica de la plataforma, realice los siguientes cambios en la opción Uber-JAR.
-
Agrega un elemento al artefactoexclusions
. SDK aws-crt-client
Esta exclusión impide que usen el SDK uber-jar de forma transitiva. AWS CRT
-
Agregue un elemento de dependencia para la versión de AWS CRT plataforma específica que necesite. Consulta los pasos para determinar la versión del AWS CRT artefacto que aparecen a continuación para saber cómo puedes determinar la versión correcta.
<project>
<properties>
<aws.sdk.java.version>2.29.101
</aws.sdk.java.version>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>software.amazon.awssdk</groupId>
<artifactId>bom</artifactId>
<version>${aws.sdk.java.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>software.amazon.awssdk</groupId>
<artifactId>aws-crt-client</artifactId>
<exclusions>
<exclusion>
<groupId>software.amazon.awssdk.crt</groupId>
<artifactId>aws-crt</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>software.amazon.awssdk.crt</groupId>
<artifactId>aws-crt</artifactId>
<version>0.31.32
</version>
<classifier>linux-x86_643
</classifier>
</dependency>
</dependencies>
1 Sustituya la versión que se muestra en rojo por la versión de Java SDK que desee utilizar. Encuentre la última versión en Maven Central.
2 Reemplace la versión software.amazon.awssdk.crt:aws-crt
que proporcionaría la opción Uber-JAR. Consulta los siguientes pasos para determinar la versión del AWS CRT artefacto.
3 Sustituya el classifier
valor por uno para su plataforma. Consulte la GitHub página AWS CRT para Java para ver una lista de los valores disponibles.
Pasos para determinar la versión del AWS CRT artefacto
Siga los pasos siguientes para determinar la versión del AWS CRT artefacto que es compatible con la versión SDK para Java que está utilizando.
-
Configure el pom.xml
archivo como se muestra en la opción Uber-JAR. Esta configuración le permite ver qué versión de software.amazon.awssdk.crt:aws-crt
la SDK trae de forma predeterminada.
-
En la raíz del proyecto (en el mismo directorio que el pom.xml
archivo), ejecuta el siguiente comando de Maven:
mvn dependency:tree -Dincludes=software.amazon.awssdk.crt:aws-crt
Maven puede realizar otras acciones, pero al final deberías ver el resultado de la consola de la software.amazon.awssdk.crt:aws-crt
dependencia que utiliza SDK transitivamente. En el siguiente fragmento se muestra un ejemplo de resultado basado en una versión de: SDK 2.29.10
[INFO] org.example:yourProject:jar:1.0-SNAPSHOT
[INFO] \- software.amazon.awssdk:aws-crt-client:jar:2.29.10:compile
[INFO] \- software.amazon.awssdk.crt:aws-crt:jar:0.31.3:compile
-
Usa la versión que muestra la consola para el software.amazon.awssdk.crt:aws-crt
artefacto. En este caso, 0.31.3
añádelo a tu pom.xml
archivo.
Utilice y configure un HTTP cliente AWS CRT basado
Puede configurar un HTTP cliente AWS CRT basado 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 de HTTP cliente AWS CRT basada.
Práctica recomendada: dedicar una instancia de a un cliente de servicio
Si necesita configurar una instancia de un HTTP cliente AWS CRT basado, le recomendamos que dedique la instancia y la cree junto con el cliente de servicio. Puede hacerlo con el método httpClientBuilder
del generador del cliente del servicio. De esta forma, el ciclo de vida del HTTP cliente lo gestiona el clienteSDK, lo que ayuda a evitar posibles pérdidas de memoria si la instancia de HTTP cliente AWS CRT basada no se cierra cuando ya no es necesaria.
En el siguiente ejemplo, se crea un cliente de servicio S3 y se configura un HTTP cliente AWS CRT basado con maxConcurrency
valores connectionTimeout
y.
- Synchronous client
-
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();
- Asynchronous client
-
Importaciones
import software.amazon.awssdk.http.crt.AwsCrtAsyncHttpClient;
import software.amazon.awssdk.services.s3.S3AsyncClient;
import java.time.Duration;
Código
// Singleton: Use s3AsyncClient for all requests.
S3AsyncClient s3AsyncClient = S3AsyncClient.builder()
.httpClientBuilder(AwsCrtAsyncHttpClient
.builder()
.connectionTimeout(Duration.ofSeconds(3))
.maxConcurrency(100))
.build();
// Perform work with the s3AsyncClient.
// Requests completed: Close the s3AsyncClient.
s3AsyncClient.close();
Enfoque alternativo: compartir una instancia
Para reducir el uso de recursos y memoria para su aplicación, puede configurar un HTTP cliente AWS CRT basado y compartirlo entre varios clientes de servicio. El grupo de HTTP conexiones se compartirá, lo que reduce el uso de recursos.
Cuando se comparte una instancia de HTTP cliente AWS CRT basada, debe cerrarla cuando esté lista para ser eliminada. No SDK cerrará la instancia cuando el cliente del servicio esté cerrado.
En el siguiente ejemplo, se configura una instancia de HTTP cliente AWS CRT basada con maxConcurrency
valores connectionTimeout
y. La instancia configurada se pasa al método httpClient
del creador de cada cliente de servicio. Cuando los clientes del servicio y el HTTP cliente ya no son necesarios, se cierran de forma explícita. El HTTP cliente es el último en cerrar.
- Synchronous client
-
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.
- Asynchronous client
-
Importaciones
import software.amazon.awssdk.auth.credentials.EnvironmentVariableCredentialsProvider;
import software.amazon.awssdk.awscore.defaultsmode.DefaultsMode;
import software.amazon.awssdk.http.async.SdkAsyncHttpClient;
import software.amazon.awssdk.http.crt.AwsCrtAsyncHttpClient;
import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.services.dynamodb.DynamoDbAsyncClient;
import software.amazon.awssdk.services.s3.S3AsyncClient;
import java.time.Duration;
Código
// Create an AwsCrtAsyncHttpClient shared instance.
SdkAsyncHttpClient crtAsyncHttpClient = AwsCrtAsyncHttpClient.builder()
.connectionTimeout(Duration.ofSeconds(3))
.maxConcurrency(100)
.build();
// Singletons: Use the s3AsyncClient and dynamoDbAsyncClient for all requests.
S3AsyncClient s3AsyncClient = S3AsyncClient.builder()
.httpClient(crtAsyncHttpClient)
.credentialsProvider(EnvironmentVariableCredentialsProvider.create())
.defaultsMode(DefaultsMode.IN_REGION)
.region(Region.US_EAST_1)
.build();
DynamoDbAsyncClient dynamoDbAsyncClient = DynamoDbAsyncClient.builder()
.httpClient(crtAsyncHttpClient)
.credentialsProvider(EnvironmentVariableCredentialsProvider.create())
.defaultsMode(DefaultsMode.IN_REGION)
.region(Region.US_EAST_1)
.build();
// Requests completed: Close all service clients.
s3AsyncClient.close();
dynamoDbAsyncClient.close();
crtAsyncHttpClient.close(); // Explicitly close crtAsyncHttpClient.
Establezca un HTTP cliente AWS CRT basado como predeterminado
Puede configurar su archivo de compilación de Maven para que SDK utilice un HTTP cliente AWS CRT basado como HTTP cliente predeterminado para los clientes de servicio.
Para ello, añada un exclusions
elemento con las dependencias de HTTP cliente predeterminadas a cada artefacto del cliente de servicio.
En el siguiente pom.xml
ejemplo, SDK utiliza un HTTP cliente AWS CRT basado para los servicios de S3. Si el cliente de servicio de su código es unS3AsyncClient
, SDK utilizaAwsCrtAsyncHttpClient
. Si el cliente de servicio es un S3Client, utiliza. SDK AwsCrtHttpClient
Con esta configuración, el cliente asíncrono predeterminado basado en Netty y el HTTP cliente síncrono predeterminado basado en Apache no están disponibles. HTTP
<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 las últimas VERSION
Valor .
Si se declaran varios clientes de servicio en un pom.xml
archivo, todos requieren el exclusions
XML elemento.
Utilizar una propiedad del sistema Java
Para usar los HTTP clientes AWS CRT basados como predeterminados HTTP para su aplicación, puede establecer la propiedad software.amazon.awssdk.http.async.service.impl
del sistema Java en un valor desoftware.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");
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 HTTP clientes AWS CRT basados.
Configuración avanzada de clientes AWS CRT basados HTTP
Puede utilizar varios ajustes de configuración de los HTTP clientes AWS CRT basados, incluida la configuración del estado de la conexión y el tiempo máximo de inactividad. Puede revisar las opciones de configuración disponibles para el AwsCrtAsyncHttpClient
. Puede configurar las mismas opciones para AwsCrtHttpClient
.
Configuración del estado de conexión
Puede configurar el estado de la conexión para los HTTP clientes AWS CRT basados mediante el connectionHealthConfiguration
método del generador de HTTP clientes.
En el siguiente ejemplo, se crea un cliente de servicio S3 que utiliza una instancia de HTTP cliente AWS CRT basada en una configuración de mantenimiento de la conexión y un tiempo máximo de inactividad para las conexiones.
- Synchronous client
-
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();
- Asynchronous client
-
Importaciones
import software.amazon.awssdk.http.crt.AwsCrtAsyncHttpClient;
import software.amazon.awssdk.services.s3.S3AsyncClient;
import java.time.Duration;
Código
// Singleton: Use the s3AsyncClient for all requests.
S3AsyncClient s3AsyncClient = S3AsyncClient.builder()
.httpClientBuilder(AwsCrtAsyncHttpClient
.builder()
.connectionHealthConfiguration(builder -> builder
.minimumThroughputInBps(32000L)
.minimumThroughputTimeout(Duration.ofSeconds(3)))
.connectionMaxIdleTime(Duration.ofSeconds(5)))
.build();
// Perform work with s3AsyncClient.
// Requests complete: Close the service client.
s3AsyncClient.close();
HTTPCompatibilidad con /2
El protocolo HTTP /2 aún no es compatible con los HTTP clientes AWS CRT basados, pero está previsto que se publique en un futuro.
Mientras tanto, si utiliza clientes de servicio que requieren compatibilidad con HTTP /2, como el KinesisAsyncCliento el TranscribeStreamingAsyncClient, considere la posibilidad de utilizar el NettyNioAsyncHttpClienten su lugar.
Ejemplo de configuración proxy
El siguiente fragmento de código muestra el uso de ProxyConfiguration.Builder
que se utiliza para configurar el proxy en el código.
- Synchronous client
-
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();
- Asynchronous client
-
Importaciones
import software.amazon.awssdk.http.async.SdkAsyncHttpClient;
import software.amazon.awssdk.http.crt.AwsCrtAsyncHttpClient;
import software.amazon.awssdk.http.crt.ProxyConfiguration;
Código
SdkAsyncHttpClient crtAsyncHttpClient = AwsCrtAsyncHttpClient.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
Para utilizar cualquiera de las propiedades del sistema HTTPS proxy, la scheme
propiedad debe estar configurada en código parahttps
. Si la propiedad del esquema no está configurada en el código, el esquema se establece de forma predeterminada HTTP y solo SDK busca las propiedades http.*
del sistema.
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