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 HTTP client URLConnection basato
AWS SDK for Java 2.x Offre un UrlConnectionHttpClient
HTTP client più leggero rispetto a quello predefinito. ApacheHttpClient
UrlConnectionHttpClient
È basato su Java. URLConnection
Si UrlConnectionHttpClient
carica più velocemente rispetto al HTTP client basato su Apache, ma ha meno funzionalità. Poiché si carica più rapidamente, è una buona soluzione per le funzioni Java. AWS Lambda
UrlConnectionHttpClient
Ha diverse opzioni configurabili
Nota
UrlConnectionHttpClient
non supporta il HTTP PATCH metodo.
Alcune AWS API operazioni richiedono PATCH richieste. I nomi di queste operazioni di solito iniziano conUpdate*
. Di seguito sono riportati alcuni esempi.
-
Diverse
Update*
operazioni AWS Security Hub API e anche l'BatchUpdateFindingsoperazione -
Tutte le API
Update*
operazioni di Amazon API Gateway -
Diverse
Update*
operazioni in Amazon WorkDocs API
Se puoi usare ilUrlConnectionHttpClient
, consulta innanzitutto il API riferimento relativo a Servizio AWS quello che stai utilizzando. Verifica se le operazioni necessarie utilizzano l'PATCHoperazione.
Accedi al UrlConnectionHttpClient
Per configurare e utilizzareUrlConnectionHttpClient
, dichiari una dipendenza dall'artefatto url-connection-client
Maven nel tuo file. pom.xml
A differenza diApacheHttpClient
, non UrlConnectionHttpClient
viene aggiunto automaticamente al progetto, quindi use deve dichiararlo specificamente.
Il seguente esempio di pom.xml
file mostra le dipendenze necessarie per utilizzare e configurare il HTTP client.
<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> <!-- other dependencies such as s3 or dynamodb --> <dependencies> <dependency> <groupId>software.amazon.awssdk</groupId> <artifactId>url-connection-client</artifactId> </dependency> </dependencies>
Usa e configura il UrlConnectionHttpClient
È possibile configurare un'istanza UrlConnectionHttpClient
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 UrlConnectionHttpClient.Builder
Procedura consigliata: dedicare un'UrlConnectionHttpClient
istanza a un client di servizio
Se devi configurare un'istanza diUrlConnectionHttpClient
, ti consigliamo di creare l'UrlConnectionHttpClient
istanza 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'UrlConnectionHttpClient
istanza non viene chiusa quando non è più necessaria.
L'esempio seguente crea S3Client
e configura l'istanza incorporata di UrlConnectionHttpClient
with and values. socketTimeout
proxyConfiguration
Il proxyConfiguration
metodo accetta un'espressione lambda Java di tipo. Consumer<ProxyConfiguration.Builder
Importazioni
import software.amazon.awssdk.http.SdkHttpClient; import software.amazon.awssdk.http.urlconnection.UrlConnectionHttpClient; import java.net.URI; import java.time.Duration;
Codice
// Singleton: Use the s3Client for all requests. S3Client s3Client = S3Client.builder() .httpClientBuilder(UrlConnectionHttpClient.builder() .socketTimeout(Duration.ofMinutes(5)) .proxyConfiguration(proxy -> proxy.endpoint(URI.create("http://proxy.mydomain.net:8888")))) .credentialsProvider(EnvironmentVariableCredentialsProvider.create()) .build(); // Perform work with the s3Client. s3Client.close(); // Requests completed: Close the s3client.
Approccio alternativo: condividi un'istanza UrlConnectionHttpClient
Per ridurre l'utilizzo di risorse e memoria per l'applicazione, è possibile configurarne un'applicazione UrlConnectionHttpClient
e condividerla tra più client di servizio. Il pool di HTTP connessioni verrà condiviso, il che riduce l'utilizzo delle risorse.
Nota
Quando un'UrlConnectionHttpClient
istanza è 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 URLConnection basato che viene utilizzato da due client di servizio. L'UrlConnectionHttpClient
istanza 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.auth.credentials.EnvironmentVariableCredentialsProvider; import software.amazon.awssdk.awscore.defaultsmode.DefaultsMode; import software.amazon.awssdk.http.SdkHttpClient; import software.amazon.awssdk.http.urlconnection.ProxyConfiguration; import software.amazon.awssdk.http.urlconnection.UrlConnectionHttpClient; import software.amazon.awssdk.services.dynamodb.DynamoDbClient; import software.amazon.awssdk.services.s3.S3Client; import java.net.URI; import java.time.Duration;
Codice
SdkHttpClient urlHttpClient = UrlConnectionHttpClient.create(); // Singletons: Use the s3Client and dynamoDbClient for all requests. S3Client s3Client = S3Client.builder() .httpClient(urlHttpClient) .defaultsMode(DefaultsMode.IN_REGION) .credentialsProvider(EnvironmentVariableCredentialsProvider.create()) .build(); DynamoDbClient dynamoDbClient = DynamoDbClient.builder() .httpClient(urlHttpClient) .defaultsMode(DefaultsMode.IN_REGION) .credentialsProvider(EnvironmentVariableCredentialsProvider.create()) .build(); // Perform work with the s3Client and dynamoDbClient. // Requests completed: Close all service clients. s3Client.close(); dynamoDbClient.close(); urlHttpClient.close();
Quando si utilizza il UrlConnectionHttpClient
nella propria applicazione, è necessario fornire a ciascun client di servizio un'URLConnectionHttpClient
istanza o un'ApacheHttpClient
istanza utilizzando il httpClientBuilder
metodo del service client builder.
Si verifica un'eccezione se il programma utilizza più client di servizio ed entrambe le seguenti condizioni sono vere:
-
Un client di servizio è configurato per utilizzare un'
UrlConnectionHttpClient
istanza -
Un altro client di servizio utilizza l'impostazione predefinita
ApacheHttpClient
senza crearla esplicitamente con i metodihttpClient()
ohttpClientBuilder()
L'eccezione indicherà che sono state trovate più HTTP implementazioni nel classpath.
Il seguente frammento di codice di esempio porta a un'eccezione.
// The dynamoDbClient uses the UrlConnectionHttpClient DynamoDbClient dynamoDbClient = DynamoDbClient.builder() .httpClient(UrlConnectionHttpClient.create()) .build(); // The s3Client below uses the ApacheHttpClient at runtime, without specifying it. // An SdkClientException is thrown with the message that multiple HTTP implementations were found on the classpath. S3Client s3Client = S3Client.create(); // Perform work with the s3Client and dynamoDbClient. dynamoDbClient.close(); s3Client.close();
Evita l'eccezione configurando esplicitamente il con un. S3Client
ApacheHttpClient
DynamoDbClient dynamoDbClient = DynamoDbClient.builder() .httpClient(UrlConnectionHttpClient.create()) .build(); S3Client s3Client = S3Client.builder() .httpClient(ApacheHttpClient.create()) // Explicitly build the ApacheHttpClient. .build(); // Perform work with the s3Client and dynamoDbClient. dynamoDbClient.close(); s3Client.close();
Nota
Per creare esplicitamente ilApacheHttpClient
, è necessario aggiungere una dipendenza dall'apache-client
artefatto nel file di progetto Maven.
Esempio di configurazione del proxy
Il seguente frammento di codice utilizza il generatore di configurazione del proxy per il URL
SdkHttpClient urlHttpClient = UrlConnectionHttpClient.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 = UrlConnectionHttpClient.builder() .proxyConfiguration(ProxyConfiguration.builder() .useSystemPropertyValues(Boolean.FALSE) .build()) .build(); // Run the application. // $ java -cp ... App
Nota
Il HTTP client URLConnection basato attualmente non supporta le proprietà del sistema HTTPS proxy o la variabile di PROXY ambiente HTTPS _.