Configuración de clientes de HTTP en AWS SDK for Java 2.x
Puede cambiar el cliente HTTP para usarlo en su cliente de servicio, así como cambiar la configuración predeterminada de los clientes HTTP con AWS SDK for Java 2.x. En esta sección se describen los clientes HTTP y la configuración del SDK.
Clientes HTTP disponibles en el SDK para Java
Clientes síncronos
Los clientes HTTP sincrónicos del SDK para Java implementan la interfaz SDKHttpClientS3Client o el DynamoDbClient, requiere el uso de un cliente HTTP síncrono. El AWS SDK para Java ofrece tres clientes HTTP síncronos.
- ApacheHttpClient (predeterminado)
-
ApacheHttpClient
es el cliente HTTP predeterminado para los clientes de servicios síncronos. Para obtener información acerca de cómo configurar el ApacheHttpClient, consulte Configurar el cliente HTTP basado en Apache. - AwsCrtHttpClient
-
AwsCrtHttpClient
proporciona un alto rendimiento y una E/S sin bloqueos. Se basa en el cliente HTTP AWS Common Runtime (CRT) de . Para obtener información sobre cómo configurar el AwsCrtHttpClienty utilizar el servicio con los clientes, consulte Configurar el cliente HTTP basado en CRT de AWS. - UrlConnectionHttpClient
-
Para minimizar la cantidad de archivos jar y bibliotecas de terceros que utiliza la aplicación, puede utilizar URLConnectionHttpClient
. Para obtener información acerca de cómo configurar el UrlConnectionHttpClient, consulte Configurar el cliente HTTP basado en URLConnection.
Clientes asíncronos
Los clientes HTTP sincrónicos del SDK para Java implementan la interfaz SdkAsyncHttpClientS3AsyncClient o el DynamoDbAsyncClient, requiere el uso de un cliente HTTP asíncrono. El AWS SDK para Java ofrece dos clientes HTTP asíncronos.
- NettyNioAsynchttpClient (predeterminado)
-
NettynioAsynchTtpClient
es el cliente HTTP predeterminado que utilizan los clientes asíncronos. Para obtener información acerca de cómo configurar el NettyNioAsyncHttpClient, consulte Configurar el cliente HTTP basado en Netty. - AwsCrtAsyncHttpClient
-
El AwsCrtAsyncHttpClient
se basa en el cliente HTTP Common Runtime (CRT) de AWS. Para obtener información acerca de cómo configurar el AwsCrtAsyncHttpClient, consulte Configurar el cliente HTTP basado en CRT de AWS.
Recomendaciones sobre el cliente HTTP
Al elegir una implementación de cliente HTTP entran en juego varios factores. Utilice la siguiente información para ayudarle en la decisión.
Diagrama de flujo de recomendaciones
El siguiente diagrama de flujo proporciona una guía general para ayudarle a determinar qué cliente HTTP debe utilizar.
Comparación de clientes HTTP
La siguiente tabla proporciona información detallada de cada cliente HTTP.
| Cliente HTTP | Sínc. or asínc. | Cuándo se debe usar | Limitación o inconveniente |
|---|---|---|---|
| Cliente HTTP basado en Apache (cliente HTTP de sincronización predeterminado) |
Sync (Sincronizar) | Úselo si prefiere una latencia baja en lugar de un alto rendimiento | Tiempo de startup más lento en comparación con otros clientes HTTP |
| Cliente HTTP basado en URLConnection | Sync (Sincronizar) | Úselo si tiene requisitos estrictos para limitar las dependencias de terceros | No admite el método HTTP PATCH, que requieren algunas API, como las operaciones de actualización de Amazon APIGateway |
| Cliente HTTP síncrono basado en CRT de AWS1 | Sync (Sincronizar) |
• Úselo si su aplicación se está ejecutando en AWS Lambda - Utilícelo si prefiere un alto rendimiento a una baja latencia • Úselo si prefiere clientes del SDK síncronos |
Ya no se admiten las siguientes propiedades del sistema de Java.
|
| Cliente HTTP basado en Netty (cliente HTTP asíncrono predeterminado) |
Asíncrono |
• Úselo si su aplicación invoca API que requieren compatibilidad con HTTP/2, como la API SubscribeToShard de Kinesis |
Tiempo de startup más lento en comparación con otros clientes HTTP |
| Cliente HTTP asíncrono basado en CRT de AWS1 | Asíncrono | • Úselo si su aplicación se está ejecutando en AWS Lambda - Utilícelo si prefiere un alto rendimiento a una baja latencia • Úselo si prefiere clientes del SDK asíncronos |
• No es compatible con clientes de servicio que requieran compatibilidad con HTTP/2, como Ya no se admiten las siguientes propiedades del sistema de Java.
|
1Recomendamos que utilice clientes HTTP basados en CRT de AWS si es posible, debido a sus ventajas adicionales.
Valores predeterminados de configuración inteligente
El AWS SDK for Java 2.x (versión 2.17.102 o posterior) ofrece una característica de configuración inteligente predeterminada. Esta característica optimiza dos propiedades del cliente HTTP junto con otras propiedades que no afectan al cliente HTTP.
Los valores predeterminados de la configuración inteligente establecen valores razonables para las propiedades connectTimeoutInMillis y tlsNegotiationTimeoutInMillis en función del valor de modo predeterminado que proporcione. El valor de modo predeterminado se elige según las características de la aplicación.
Para obtener más información sobre la configuración inteligente predeterminada y sobre cómo elegir el mejor modo predeterminado para sus aplicaciones, consulte la Guía de referencia de las herramientas y los SDK de AWS.
A continuación, se muestran cuatro formas de configurar el modo predeterminado para su aplicación.
Si define el modo predeterminado de forma global con la propiedad del sistema, la variable de entorno o el archivo de configuración AWS, puede sustituir la configuración cuando cree un cliente HTTP.
Al crear un cliente HTTP con el método httpClientBuilder(), la configuración se aplica solo a la instancia que se está creando. Un ejemplo de ello se muestra aquí. En este ejemplo, el cliente HTTP basado en Netty anula cualquier valor de modo predeterminado establecido globalmente para connectTimeoutInMillis y tlsNegotiationTimeoutInMillis.