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à.
Configurazione AWS dei client HTTP basati su CRT
I client HTTP AWS basati su CRT includono quelli sincroni e asincroni. AwsCrtHttpClientAwsCrtAsyncHttpClient
-
Tempo di avvio SDK più rapido
-
Ingombro di memoria ridotto
-
Tempo di latenza ridotto
-
Gestione dello stato della connessione
-
Bilanciamento del carico DNS
AWS Componenti basati su CRT nell'SDK
I client HTTP AWS basati su CRT, descritti in questo argomento, e il client S3 AWS basato su CRT sono componenti diversi dell'SDK.
I client HTTP sincroni e asincroni AWS basati su CRT sono interfacce client HTTP SDK di implementazione e vengono utilizzati per comunicazioni HTTP generali. Sono alternative agli altri client HTTP sincroni o asincroni dell'SDK con vantaggi aggiuntivi.
Il client S3 AWS basato su CRT è un'implementazione dell'AsyncClientinterfaccia S3S3AsyncClient
Sebbene entrambi i componenti utilizzino librerie del AWS Common Runtime, i client HTTP AWS basati su CRT non utilizzano la libreria aws-c-s 3
Accedi AWS ai client HTTP basati su CRT
Prima di poter utilizzare i client HTTP AWS basati su CRT, aggiungete l'aws-crt-client
artefatto con una versione minima di 2.22.0 alle dipendenze del progetto.
Il seguente Maven pom.xml
mostra i client HTTP AWS basati su CRT dichiarati utilizzando il meccanismo della distinta base (BOM).
<project> <properties> <aws.sdk.version>
2.22.0
</aws.sdk.version> </properties> <dependencyManagement> <dependencies> <dependency> <groupId>software.amazon.awssdk</groupId> <artifactId>bom</artifactId> <version>${aws.sdk.version}</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <dependencies> <dependency> <groupId>software.amazon.awssdk</groupId> <artifactId>aws-crt-client</artifactId> </dependency> </dependencies> </project>
Visita il repository centrale di Maven per la versione più recente.
Usa e configura un AWS client HTTP basato su CRT
È possibile configurare un client HTTP AWS basato su CRT insieme alla creazione di un client di servizio oppure è possibile configurare una singola istanza da condividere tra più client di servizio.
Con entrambi gli approcci, si utilizza un builder per configurare le proprietà per l'istanza del client
Procedura consigliata: dedicare un'istanza a un client di servizio
Se devi configurare un'istanza di un client HTTP AWS basato su CRT, ti consigliamo di dedicare l'istanza costruendola insieme al client di servizio. Puoi farlo utilizzando il httpClientBuilder
metodo del builder del client del servizio. In questo modo, il ciclo di vita del client HTTP viene gestito dall'SDK, che aiuta a evitare potenziali perdite di memoria se l'istanza del client HTTP AWS basato su CRT non viene chiusa quando non è più necessaria.
L'esempio seguente crea un client di servizio S3 e configura un client HTTP basato su CRT con valori e. AWS connectionTimeout
maxConcurrency
Approccio alternativo: condividi un'istanza
Per ridurre l'utilizzo di risorse e memoria per l'applicazione, è possibile configurare un client HTTP AWS basato su CRT e condividerlo tra più client di servizio. Il pool di connessioni HTTP verrà condiviso, il che riduce l'utilizzo delle risorse.
Nota
Quando un'istanza client HTTP AWS basata su CRT viene condivisa, è necessario chiuderla quando è pronta per essere eliminata. L'SDK non chiuderà l'istanza quando il client del servizio viene chiuso.
L'esempio seguente configura un'istanza client HTTP AWS basata su CRT con valori e. connectionTimeout
maxConcurrency
L'istanza configurata viene passata al httpClient
metodo del builder di ogni client di servizio. Quando i client di servizio e il client HTTP non sono più necessari, vengono chiusi in modo esplicito. Il client HTTP viene chiuso per ultimo.
Imposta un client HTTP AWS basato su CRT come predefinito
Puoi configurare il tuo file di build Maven in modo che l'SDK utilizzi un client HTTP AWS basato su CRT come client HTTP predefinito per i client di servizio.
A tale scopo, è possibile aggiungere un exclusions
elemento con le dipendenze del client HTTP predefinite a ciascun elemento del client di servizio.
Nell'pom.xml
esempio seguente, l'SDK utilizza un client HTTP AWS basato su CRT per i servizi S3. Se il client di servizio nel codice è unS3AsyncClient
, l'SDK lo utilizza. AwsCrtAsyncHttpClient
Se il client di servizio è un S3Client, l'SDK utilizza. AwsCrtHttpClient
Con questa configurazione il client HTTP asincrono predefinito basato su Netty e l'HTTP sincrono predefinito basato su Apache non sono disponibili.
<project> <properties> <aws.sdk.version>
VERSION
</aws.sdk.version> </properties> <dependencies> <dependency> <groupId>software.amazon.awssdk</groupId> <artifactId>s3</artifactId> <version>${aws.sdk.version}</version> <exclusions> <exclusion> <groupId>software.amazon.awssdk</groupId> <artifactId>netty-nio-client</artifactId> </exclusion> <exclusion> <groupId>software.amazon.awssdk</groupId> <artifactId>apache-client</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>software.amazon.awssdk</groupId> <artifactId>aws-crt-client</artifactId> </dependency> </dependencies> </project>
Visita l'archivio centrale di Maven per il valore VERSION più recente.
Nota
Se in un pom.xml
file vengono dichiarati più client di servizio, tutti richiedono l'exclusions
elemento XML.
Utilizzate una proprietà di sistema Java
Per utilizzare i client HTTP AWS basati su CRT come HTTP predefinito per l'applicazione, è possibile impostare la proprietà del sistema Java su un valore software.amazon.awssdk.http.async.service.impl
di. software.amazon.awssdk.http.crt.AwsCrtSdkHttpService
Per impostarlo durante l'avvio dell'applicazione, eseguite un comando simile al seguente.
java app.jar -Dsoftware.amazon.awssdk.http.async.service.impl=\ software.amazon.awssdk.http.crt.AwsCrtSdkHttpService
Utilizzate il seguente frammento di codice per impostare la proprietà di sistema nel codice dell'applicazione.
System.setProperty("software.amazon.awssdk.http.async.service.impl", "software.amazon.awssdk.http.crt.AwsCrtSdkHttpService");
Nota
È necessario aggiungere una dipendenza dall'elemento nel poml.xml
file quando si utilizza una proprietà di sistema per configurare l'uso dei client HTTP basati su aws-crt-client
CRT. AWS
Configurazione avanzata dei client HTTP basati su CRT AWS
È possibile utilizzare varie impostazioni di configurazione dei client HTTP AWS basati su CRT, tra cui la configurazione dello stato della connessione e il tempo massimo di inattività. È possibile esaminare le opzioni di configurazione disponibili per.AwsCrtAsyncHttpClient
È possibile configurare le stesse opzioni perAwsCrtHttpClient
.
Configurazione dello stato della connessione
È possibile configurare la configurazione dello stato della connessione per i client HTTP AWS basati su CRT utilizzando il connectionHealthConfiguration
metodo del generatore di client HTTP.
L'esempio seguente crea un client di servizio S3 che utilizza un'istanza del client HTTP AWS basata su CRT configurata con la configurazione dello stato della connessione e un tempo di inattività massimo per le connessioni.
Supporto HTTP/2
Il protocollo HTTP/2 non è ancora supportato nei client HTTP AWS basati su CRT, ma è previsto per una versione futura.
Nel frattempo, se utilizzi client di servizio che richiedono il supporto HTTP/2 come the o the, considera di utilizzare invece il KinesisAsyncClient
Esempio di configurazione del proxy
Il seguente frammento di codice mostra l'uso di ProxyConfiguration.Builder
Le proprietà di sistema Java equivalenti per la configurazione del proxy sono mostrate nel seguente frammento di riga di comando.
$ java -Dhttps.proxyHost=myproxy -Dhttps.proxyPort=1234 -Dhttps.proxyUser=username \ -Dhttps.proxyPassword=password -Dhttp.nonProxyHosts=localhost|host.example.com -cp ... App
Importante
Per utilizzare una qualsiasi delle proprietà del sistema proxy HTTPS, la scheme
proprietà deve essere impostata nel codice su. https
Se la proprietà scheme non è impostata nel codice, per impostazione predefinita lo schema è HTTP e l'SDK cerca http.*
solo le proprietà di sistema.
La configurazione equivalente che utilizza le variabili di ambiente è:
// Set the following environment variables. // $ export HTTPS_PROXY="https://username:password@myproxy:1234" // $ export NO_PROXY="localhost|host.example.com" // Set the 'useSystemPropertyValues' to false on the proxy configuration. SdkAsyncHttpClient crtAsyncHttpClient = AwsCrtAsyncHttpClient.builder() .proxyConfiguration(ProxyConfiguration.builder() .scheme("https") .useSystemPropertyValues(Boolean.FALSE) .build()) .build(); // Run the application. // $ java -cp ... App