Configurar el cliente basado en Apache HTTP - 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.

Configurar el cliente basado en Apache HTTP

Los clientes del servicio sincrónico AWS SDK for Java 2.x utilizan un HTTP cliente basado en Apache, ApacheHttpClientde forma predeterminada. El SDK ApacheHttpClient está basado en Apache. HttpClient

SDKTambién ofrece el UrlConnectionHttpClient, que se carga más rápido, pero tiene menos funciones. Para obtener información acerca de cómo configurar el UrlConnectionHttpClient, consulte Configurar el HTTP cliente URLConnection basado.

Para ver el conjunto completo de opciones de configuración disponibles para elApacheHttpClient, consulte ApacheHttpClient.Builder y ProxyConfiguration.Builder.

Acceso al ApacheHttpClient

En la mayoría de las situaciones, ApacheHttpClient se utiliza sin ninguna configuración explícita. Usted declara sus clientes de servicio y ellos los SDK configurarán ApacheHttpClient con valores estándar por usted.

Si quiere configurar de forma explícita el ApacheHttpClient o usarlo con varios clientes de servicio, tiene que hacerlo disponible para su configuración.

No se necesita configuración

Cuando declaras una dependencia de un cliente de servicio en Maven, se SDK añade una dependencia del apache-client artefacto en tiempo de ejecución. Esto hace que la clase ApacheHttpClient esté disponible para su código en el tiempo de ejecución, pero no en el de compilación. Si no está configurando el HTTP cliente basado en Apache, no necesita especificar una dependencia para él.

En el siguiente XML fragmento de un pom.xml archivo Maven, la dependencia declarada con incluye <artifactId>s3</artifactId> automáticamente el cliente basado en Apache. HTTP No necesita declarar una dependencia específicamente para ella.

<dependencyManagement> <dependencies> <dependency> <groupId>software.amazon.awssdk</groupId> <artifactId>bom</artifactId> <version>2.27.21</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <dependencies> <!-- The s3 dependency automatically adds a runtime dependency on the ApacheHttpClient--> <dependency> <groupId>software.amazon.awssdk</groupId> <artifactId>s3</artifactId> </dependency> </dependencies>

Con estas dependencias, no puede realizar ningún cambio de HTTP configuración explícito, ya que la ApacheHttpClient biblioteca solo se encuentra en la ruta de clases en tiempo de ejecución.

Se necesita configuración

Para configurar el ApacheHttpClient, es necesario añadir una dependencia a la biblioteca apache-client en el momento de la compilación.

Consulte el siguiente ejemplo de un archivo pom.xml Maven para configurar el ApacheHttpClient.

<dependencyManagement> <dependencies> <dependency> <groupId>software.amazon.awssdk</groupId> <artifactId>bom</artifactId> <version>2.27.21</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <dependencies> <dependency> <groupId>software.amazon.awssdk</groupId> <artifactId>s3</artifactId> </dependency> <!-- By adding the apache-client dependency, ApacheHttpClient will be added to the compile classpath so you can configure it. --> <dependency> <groupId>software.amazon.awssdk</groupId> <artifactId>apache-client</artifactId> </dependency> </dependencies>

Utilizar y configurar el ApacheHttpClient

Puede configurar una instancia del ApacheHttpClient junto con la creación de un cliente de servicio, o configurar una sola instancia para compartirla entre varios clientes de servicio.

Con cualquiera de los dos enfoques, se utiliza ApacheHttpClient.Builder para configurar las propiedades del cliente basado en Apache. HTTP

Práctica recomendada: dedicar una instancia de ApacheHttpClient a un cliente de servicio

Si necesita configurar una instancia del ApacheHttpClient, le recomendamos que cree la instancia ApacheHttpClient dedicada. 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 elSDK, lo que ayuda a evitar posibles pérdidas de memoria si la ApacheHttpClient instancia no se cierra cuando ya no es necesaria.

En el ejemplo siguiente, se crea un S3Client y se configura la instancia integrada de ApacheHttpClient con los valores maxConnections y connectionTimeout. La HTTP instancia se crea mediante el httpClientBuilder método deS3Client.Builder.

Importaciones

import software.amazon.awssdk.http.apache.ApacheHttpClient; import software.amazon.awssdk.services.s3.S3Client; import java.time.Duration;

Código

S3Client s3Client = S3Client // Singleton: Use the s3Client for all requests. .builder() .httpClientBuilder(ApacheHttpClient.builder() .maxConnections(100) .connectionTimeout(Duration.ofSeconds(5)) ).build(); // Perform work with the s3Client. s3Client.close(); // Requests completed: Close all service clients.

Enfoque alternativo: compartir una instancia ApacheHttpClient

Para reducir el uso de recursos y memoria en su aplicación, puede configurar un ApacheHttpClient y compartirlo entre varios clientes de servicio. El grupo de HTTP conexiones se compartirá, lo que reduce el uso de recursos.

nota

Al compartir una instancia de ApacheHttpClient, es preciso cerrarla cuando esté lista para ser eliminada. No SDK cerrará la instancia cuando el cliente del servicio esté cerrado.

El siguiente ejemplo configura un HTTP cliente basado en Apache que utilizan dos clientes de servicio. La instancia de ApacheHttpClient configurada se pasa al método httpClient de cada creador. Cuando los clientes de servicio y el HTTP cliente ya no son necesarios, el código los cierra de forma explícita. El código cierra al HTTP cliente en último lugar.

Importaciones

import software.amazon.awssdk.http.SdkHttpClient; import software.amazon.awssdk.http.apache.ApacheHttpClient; import software.amazon.awssdk.services.dynamodb.DynamoDbClient; import software.amazon.awssdk.services.s3.S3Client;

Código

SdkHttpClient apacheHttpClient = ApacheHttpClient.builder() .maxConnections(100).build(); // Singletons: Use the s3Client and dynamoDbClient for all requests. S3Client s3Client = S3Client.builder() .httpClient(apacheHttpClient).build(); DynamoDbClient dynamoDbClient = DynamoDbClient.builder() .httpClient(apacheHttpClient).build(); // Perform work with the s3Client and dynamoDbClient. // Requests completed: Close all service clients. s3Client.close(); dynamoDbClient.close(); apacheHttpClient.close(); // Explicitly close apacheHttpClient.

Ejemplo de configuración proxy

El siguiente fragmento de código utiliza el generador de configuración de proxy para el cliente Apache HTTP.

SdkHttpClient apacheHttpClient = ApacheHttpClient.builder() .proxyConfiguration(ProxyConfiguration.builder() .endpoint(URI.create("http://example.com:1234")) .username("username") .password("password") .addNonProxyHost("localhost") .addNonProxyHost("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 -Dhttp.proxyHost=example.com -Dhttp.proxyPort=1234 -Dhttp.proxyUser=username \ -Dhttp.proxyPassword=password -Dhttp.nonProxyHosts=localhost|host.example.com -cp ... App

La configuración equivalente que usa variables de entorno es:

// Set the following environment variables. // $ export HTTP_PROXY="http://username:password@example.com:1234" // $ export NO_PROXY="localhost|host.example.com" // Set the 'useSystemPropertyValues' to false on the proxy configuration. SdkHttpClient apacheHttpClient = ApacheHttpClient.builder() .proxyConfiguration(ProxyConfiguration.builder() .useSystemPropertyValues(Boolean.FALSE) .build()) .build(); // Run the application. // $ java -cp ... App
nota

El HTTP cliente Apache no admite actualmente las propiedades del sistema HTTPS proxy ni la variable de PROXY entorno HTTPS _.