Configurare il client basato su HTTP Apache - AWS SDK for Java 2.x

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Configurare il client basato su HTTP Apache

Per impostazione predefinita, i client di servizio sincroni AWS SDK for Java 2.x utilizzano un client basato su HTTP Apache. ApacheHttpClient SDKThe's ApacheHttpClient è basato su Apache. HttpClient

Offre SDK anche il UrlConnectionHttpClient, che si carica più velocemente, ma ha meno funzionalità. Per informazioni sulla configurazione diUrlConnectionHttpClient, vedereConfigurare il HTTP client URLConnection basato.

Per visualizzare il set completo di opzioni di configurazione disponibili perApacheHttpClient, consulta ApacheHttpClient.Builder e .Builder. ProxyConfiguration

Accedi a ApacheHttpClient

Nella maggior parte dei casi, si utilizza ApacheHttpClient senza alcuna configurazione esplicita. Dichiari i tuoi clienti di servizio e loro li SDK configureranno ApacheHttpClient con valori standard per te.

Se desideri configurarlo in modo esplicito ApacheHttpClient o utilizzarlo con più client di servizio, devi renderlo disponibile per la configurazione.

Non è necessaria alcuna configurazione

Quando si dichiara una dipendenza da un client di servizio in Maven, SDK viene aggiunta una dipendenza di runtime dall'artefatto. apache-client Ciò rende la ApacheHttpClient classe disponibile per il codice in fase di esecuzione, ma non in fase di compilazione. Se non state configurando il HTTP client basato su Apache, non è necessario specificare una dipendenza per esso.

Nel seguente XML frammento di pom.xml file Maven, la dipendenza dichiarata con introduce automaticamente il client basato su Apache. <artifactId>s3</artifactId> HTTP Non è necessario dichiarare una dipendenza specifica per questo.

<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 queste dipendenze, non è possibile apportare modifiche esplicite alla HTTP configurazione, poiché la ApacheHttpClient libreria si trova solo nel classpath di runtime.

Configurazione necessaria

Per configurareApacheHttpClient, è necessario aggiungere una dipendenza dalla libreria in fase di compilazioneapache-client.

Fate riferimento al seguente esempio di pom.xml file Maven per configurare. 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>

Usa e configura il ApacheHttpClient

È possibile configurare un'istanza ApacheHttpClient insieme alla creazione di un client di servizio oppure configurare una singola istanza da condividere tra più client di servizio.

Con entrambi gli approcci, si utilizza ApacheHttpClient.Builder per configurare le proprietà per il client basato su HTTP Apache.

Procedura consigliata: dedicare un'ApacheHttpClientistanza a un client di servizio

Se devi configurare un'istanza diApacheHttpClient, ti consigliamo di creare l'ApacheHttpClientistanza dedicata. Puoi farlo utilizzando il httpClientBuilder metodo del builder del client del servizio. In questo modo, il ciclo di vita del HTTP client è gestito daSDK, il che aiuta a evitare potenziali perdite di memoria se l'ApacheHttpClientistanza non viene chiusa quando non è più necessaria.

L'esempio seguente crea S3Client e configura l'istanza incorporata di ApacheHttpClient with and values. maxConnections connectionTimeout L'HTTPistanza viene creata utilizzando il httpClientBuilder metodo diS3Client.Builder.

Importazioni

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

Codice

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.

Approccio alternativo: condividi un'ApacheHttpClientistanza

Per ridurre l'utilizzo di risorse e memoria per l'applicazione, è possibile configurarne un'applicazione ApacheHttpClient e condividerla tra più client di servizio. Il pool di HTTP connessioni verrà condiviso, il che riduce l'utilizzo delle risorse.

Nota

Quando un'ApacheHttpClientistanza è condivisa, è necessario chiuderla quando è pronta per essere eliminata. Non SDK chiuderà l'istanza quando il client del servizio viene chiuso.

L'esempio seguente configura un HTTP client basato su Apache utilizzato da due client di servizio. L'ApacheHttpClientistanza configurata viene passata al httpClient metodo di ogni builder. Quando i client del servizio e il HTTP client non sono più necessari, il codice li chiude esplicitamente. Il codice chiude il client per ultimo. HTTP

Importazioni

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;

Codice

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.

Esempio di configurazione del proxy

Il seguente frammento di codice utilizza il generatore di configurazione proxy per il client 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();

Le proprietà di sistema Java equivalenti per la configurazione del proxy sono mostrate nel seguente frammento di riga di comando.

$ java -Dhttp.proxyHost=example.com -Dhttp.proxyPort=1234 -Dhttp.proxyUser=username \ -Dhttp.proxyPassword=password -Dhttp.nonProxyHosts=localhost|host.example.com -cp ... App

La configurazione equivalente che utilizza le variabili di ambiente è:

// 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

Il HTTP client Apache attualmente non supporta le proprietà del sistema HTTPS proxy o la variabile di PROXY ambiente HTTPS _.