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 Netty HTTP
Il HTTP client predefinito per le operazioni asincrone in è basato su Netty. AWS SDK for Java 2.x NettyNioAsyncHttpClient
Come HTTP client alternativo, puoi utilizzare il nuovo client basato.AWS CRT HTTP In questo argomento viene illustrato come configurareNettyNioAsyncHttpClient
.
Accedere a NettyNioAsyncHttpClient
Nella maggior parte dei casi, si utilizza la NettyNioAsyncHttpClient
senza alcuna configurazione esplicita nei programmi asincroni. Dichiari i tuoi client di servizio asincroni e li SDK configurerai automaticamente con valori standard. NettyNioAsyncHttpClient
Se desideri configurarli in modo esplicito NettyNioAsyncHttpClient
o utilizzarli con più client di servizio, devi renderli disponibili 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. netty-nio-client
Ciò rende la NettyNioAsyncHttpClient
classe disponibile per il codice in fase di esecuzione, ma non in fase di compilazione. Se non state configurando il HTTP client basato su Netty, non è necessario specificare una dipendenza per esso.
Nel seguente XML frammento di pom.xml
file Maven, la dipendenza dichiarata con introduce in modo transitivo il client basato su Netty. <artifactId>dynamodb-enhanced</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> <dependency> <groupId>software.amazon.awssdk</groupId> <artifactId>dynamodb-enhanced</artifactId> </dependency> </dependencies>
Con queste dipendenze, non è possibile apportare modifiche alla HTTP configurazione, poiché la NettyNioAsyncHttpClient
libreria si trova solo nel classpath di runtime.
Configurazione necessaria
Per configurareNettyNioAsyncHttpClient
, è necessario aggiungere una dipendenza dall'netty-nio-client
artefatto in fase di compilazione.
Fate riferimento al seguente esempio di file pom.xml
Maven per configurare. NettyNioAsyncHttpClient
<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>dynamodb-enhanced</artifactId> </dependency> <!-- By adding the netty-nio-client dependency, NettyNioAsyncHttpClient will be added to the compile classpath so you can configure it. --> <dependency> <groupId>software.amazon.awssdk</groupId> <artifactId>netty-nio-client</artifactId> </dependency> </dependencies>
Usa e configura il NettyNioAsyncHttpClient
È possibile configurare un'istanza NettyNioAsyncHttpClient
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 NettyNioAsyncHttpClient.Builder
Procedura consigliata: dedicare un'NettyNioAsyncHttpClient
istanza a un client di servizio
Se devi configurare un'istanza diNettyNioAsyncHttpClient
, ti consigliamo di creare un'NettyNioAsyncHttpClient
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'NettyNioAsyncHttpClient
istanza non viene chiusa quando non è più necessaria.
L'esempio seguente crea un'DynamoDbAsyncClient
istanza che viene utilizzata da un'istanza. DynamoDbEnhancedAsyncClient
L'DynamoDbAsyncClient
istanza contiene l'NettyNioAsyncHttpClient
istanza con connectionTimeout
e maxConcurrency
valori. L'HTTPistanza viene creata utilizzando httpClientBuilder
il metodo diDynamoDbAsyncClient.Builder
.
Importazioni
import software.amazon.awssdk.auth.credentials.EnvironmentVariableCredentialsProvider; import software.amazon.awssdk.awscore.defaultsmode.DefaultsMode; import software.amazon.awssdk.enhanced.dynamodb.DynamoDbEnhancedAsyncClient; import software.amazon.awssdk.enhanced.dynamodb.extensions.AutoGeneratedTimestampRecordExtension; import software.amazon.awssdk.http.nio.netty.NettyNioAsyncHttpClient; import software.amazon.awssdk.services.dynamodb.DynamoDbAsyncClient; import java.time.Duration;
Codice
// DynamoDbAsyncClient is the lower-level client used by the enhanced client. DynamoDbAsyncClient dynamoDbAsyncClient = DynamoDbAsyncClient .builder() .httpClientBuilder(NettyNioAsyncHttpClient.builder() .connectionTimeout(Duration.ofMillis(5_000)) .maxConcurrency(100) .tlsNegotiationTimeout(Duration.ofMillis(3_500))) .defaultsMode(DefaultsMode.IN_REGION) .credentialsProvider(EnvironmentVariableCredentialsProvider.create()) .build(); // Singleton: Use dynamoDbAsyncClient and enhancedClient for all requests. DynamoDbEnhancedAsyncClient enhancedClient = DynamoDbEnhancedAsyncClient .builder() .dynamoDbClient(dynamoDbAsyncClient) .extensions(AutoGeneratedTimestampRecordExtension.create()) .build(); // Perform work with the dynamoDbAsyncClient and enhancedClient. // Requests completed: Close dynamoDbAsyncClient. dynamoDbAsyncClient.close();
Approccio alternativo: condividi un'NettyNioAsyncHttpClient
istanza
Per ridurre l'utilizzo di risorse e memoria per l'applicazione, è possibile configurare un'applicazione NettyNioAsyncHttpClient
e condividerla tra più client di servizio. Il pool di HTTP connessioni verrà condiviso, il che riduce l'utilizzo delle risorse.
Nota
Quando un'NettyNioAsyncHttpClient
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 basato su Netty utilizzato da due client di servizio. L'NettyNioAsyncHttpClient
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.http.SdkHttpClient; import software.amazon.awssdk.http.apache.ApacheHttpClient; import software.amazon.awssdk.services.dynamodb.DynamoDbClient; import software.amazon.awssdk.services.s3.S3Client;
Codice
// Create a NettyNioAsyncHttpClient shared instance. SdkAsyncHttpClient nettyHttpClient = NettyNioAsyncHttpClient.builder().maxConcurrency(100).build(); // Singletons: Use the s3AsyncClient, dbAsyncClient, and enhancedAsyncClient for all requests. S3AsyncClient s3AsyncClient = S3AsyncClient.builder() .httpClient(nettyHttpClient) .build(); DynamoDbAsyncClient dbAsyncClient = DynamoDbAsyncClient.builder() .httpClient(nettyHttpClient) .defaultsMode(DefaultsMode.IN_REGION) .credentialsProvider(EnvironmentVariableCredentialsProvider.create()) .build(); DynamoDbEnhancedAsyncClient enhancedAsyncClient = DynamoDbEnhancedAsyncClient.builder() .dynamoDbClient(dbAsyncClient) .extensions(AutoGeneratedTimestampRecordExtension.create()) .build(); // Perform work with s3AsyncClient, dbAsyncClient, and enhancedAsyncClient. // Requests completed: Close all service clients. s3AsyncClient.close(); dbAsyncClient.close() nettyHttpClient.close(); // Explicitly close nettyHttpClient.
Esempio di configurazione del proxy
Il seguente frammento di codice utilizza il generatore di configurazione proxy per il
SdkAsyncHttpClient nettyHttpClient = NettyNioAsyncHttpClient.builder() .proxyConfiguration(ProxyConfiguration.builder() .scheme("https") .host("myproxy") .port(1234) .username("username") .password("password") .nonProxyHosts(Set.of("localhost", "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 -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 HTTPS proxy, la scheme
proprietà deve essere impostata nel codice su. https
Se la proprietà scheme non è impostata nel codice, il valore predefinito dello schema è HTTP e SDK cerca solo le proprietà del http.*
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 nettyHttpClient = NettyNioAsyncHttpClient.builder() .proxyConfiguration(ProxyConfiguration.builder() .useSystemPropertyValues(Boolean.FALSE) .build()) .build(); // Run the application. // $ java -cp ... App