View a markdown version of this page

Configure los clientes HTTP en AWS SDK for Java 2.x - AWS SDK for Java 2.x

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.

Configure los clientes 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 SdkHttpClient interfaz. Un cliente de servicio síncrono, como el S3Client o el DynamoDbClient, requiere el uso de un cliente HTTP síncrono. AWS SDK para Java Ofrece tres clientes HTTP sincrónicos.

Apache5HttpClient (predeterminado)

Apache5HttpClientes una versión actualizada de la ApacheHttpClient que se basa en Apache 5.x HttpClient. La versión 5.x es la versión mantenida activamente por Apache y mejora la versión anterior utilizada al ofrecer compatibilidad con el ecosistema Java moderno, incluida la compatibilidad con subprocesos virtuales para Java 2.1 y una mayor flexibilidad de registro a través de SLF4J. ApacheHttpClient Apache5HttpClientreemplazada ApacheHttpClient como cliente sincrónico predeterminado en la versión 2.x 2.46.0 del AWS SDK para Java. Tiene una API y funciones idénticas, lo que lo hace ideal como sustituto inmediato. Para obtener información acerca de cómo configurar el Apache5HttpClient, consulte Configurar el cliente HTTP basado en Apache 5.x.

ApacheHttpClient
nota

ApacheHttpClientestá en desuso porque Apache HttpClient 4.x está en modo de mantenimiento. Utilice el modelo basado en Apache HttpClient 5.x. Apache5HttpClient

ApacheHttpClientse basa en el Apache HttpClient 4.x. Para obtener información acerca de cómo configurar el ApacheHttpClient, consulte Configurar el cliente Apache-based HTTP.

AwsCrtHttpClient

AwsCrtHttpClientproporciona un alto rendimiento de E/S sin bloqueos. Se basa en el cliente HTTP AWS Common Runtime (CRT). Para obtener información sobre cómo configurar el AwsCrtHttpClient y utilizar el servicio con los clientes, consulte Configurar clientes AWS HTTP basados en CRT.

UrlConnectionHttpClient

Para minimizar la cantidad de archivos jar y bibliotecas de terceros que usa tu aplicación, puedes usar el UrlConnectionHttpClient. Para obtener información acerca de cómo configurar el UrlConnectionHttpClient, consulte Configurar el cliente HTTP URLConnection basado.

Clientes asíncronos

Los clientes HTTP asíncronos del SDK para Java implementan la interfaz. SdkAsyncHttpClient Un cliente de servicio asíncrono, como el S3AsyncClient o el DynamoDbAsyncClient, requiere el uso de un cliente HTTP asíncrono. AWS SDK para Java Ofrece dos clientes HTTP asíncronos.

NettyNioAsyncHttpClient (predeterminado)

NettyNioAsyncHttpClientes el cliente HTTP predeterminado que utilizan los clientes asincrónicos. Para obtener información acerca de cómo configurar el NettyNioAsyncHttpClient, consulte Configurar el cliente HTTP basado en Netty.

AwsCrtAsyncHttpClient

AwsCrtAsyncHttpClientSe basa en el cliente HTTP AWS Common Runtime (CRT). Para obtener información acerca de cómo configurar el AwsCrtAsyncHttpClient, consulte Configurar clientes AWS HTTP basados en CRT.

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.

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 Limitation/drawback
Cliente HTTP basado en Apache 5.x

(cliente HTTP de sincronización predeterminado)

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
URLConnection-based Cliente HTTP 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

• No admite un tiempo de espera de conexión inactiva configurable. Consulte Configurar el cliente URLConnection-based HTTP para obtener más información.

AWS CRT-based sincronizar el cliente HTTP 1 Sincronizar

• Úselo si su aplicación se ejecuta 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.

  • javax.net.ssl.keyStore

  • javax.net.ssl.key StorePassword

  • javax.net.ssl.trustStore

  • javax.net.ssl.trust StorePassword

Netty-based Cliente HTTP

(cliente HTTP asíncrono predeterminado)

Asíncrono

• Úselo si su aplicación depende de las propiedades del sistema Java para la configuración de TLS (por ejemplo) javax.net.ssl.keyStore

Tiempo de startup más lento en comparación con otros clientes HTTP
AWS CRT-based cliente HTTP asíncrono 1 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

Ya no se admiten las siguientes propiedades del sistema de Java.

  • javax.net.ssl.keyStore

  • javax.net.ssl.key StorePassword

  • javax.net.ssl.trustStore

  • javax.net.ssl.trust StorePassword

1 Debido a sus ventajas adicionales, le recomendamos que utilice los clientes HTTP si es posible. AWS CRT-based

Valores predeterminados de configuración inteligente

La AWS SDK for Java 2.x (versión 2.17.102 o posterior) ofrece una función de configuración predeterminada inteligente. 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.

Service client

Utilice el generador de clientes de servicio para configurar el modo predeterminado directamente en el cliente de servicio. El siguiente ejemplo establece el modo predeterminado en auto para el DynamoDbClient.

DynamoDbClient ddbClient = DynamoDbClient.builder() .defaultsMode(DefaultsMode.AUTO) .build();
System property

Puede usar la propiedad del aws.defaultsMode sistema para especificar el modo predeterminado. Si establece la propiedad del sistema en Java, debe establecerla antes de inicializar cualquier cliente de servicio.

En el siguiente ejemplo, se muestra cómo configurar el modo predeterminado en auto usar un conjunto de propiedades del sistema en Java.

System.setProperty("aws.defaultsMode", "auto");

En el siguiente ejemplo, se muestra cómo configurar el modo predeterminado como auto mediante una opción -D del comando java.

java -Daws.defaultsMode=auto
Environment variable

Defina un valor para la variable de entorno AWS_DEFAULTS_MODE para seleccionar el modo predeterminado de la aplicación.

La siguiente información muestra el comando que se debe ejecutar para establecer el valor del modo predeterminado como auto utilizando una variable de entorno.

Sistema operativo Comando para definir variables de entorno

Linux, macOS o Unix

export AWS_DEFAULTS_MODE=auto

Windows

set AWS_DEFAULTS_MODE=auto
AWS config file

Puede agregar una propiedad de defaults_mode configuración al AWS config archivo compartido, como se muestra en el siguiente ejemplo.

[default] defaults_mode = auto

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í. El cliente Netty-based HTTP de este ejemplo anula cualquier valor de modo predeterminado establecido globalmente para connectTimeoutInMillis ytlsNegotiationTimeoutInMillis.