Configurazione del client HTTP basato su Netty - 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à.

Configurazione del client HTTP basato su Netty

Il client HTTP predefinito per le operazioni asincrone in è basato su Netty. AWS SDK for Java 2.x NettyNioAsyncHttpClient Il client basato su Netty si basa sul framework di rete asincrono basato sugli eventi del progetto Netty.

Come client HTTP alternativo, è possibile utilizzare il nuovo client HTTP basato su CRT.AWS In questo argomento viene illustrato come configurare. NettyNioAsyncHttpClient

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 l'SDK li configurerà 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, l'SDK aggiunge 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 client HTTP basato su Netty, non è necessario specificare una dipendenza per esso.

Nel seguente frammento XML di un pom.xml file Maven, la dipendenza dichiarata con richiama in modo transitivo il client HTTP basato su Netty. <artifactId>dynamodb-enhanced</artifactId> Non è necessario dichiarare una dipendenza specifica per questo.

<dependencyManagement> <dependencies> <dependency> <groupId>software.amazon.awssdk</groupId> <artifactId>bom</artifactId> <version>2.17.290</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 configurazione HTTP, poiché la NettyNioAsyncHttpClient libreria si trova solo nel classpath di runtime.

Configurazione necessaria

Per configurareNettyNioAsyncHttpClient, è necessario aggiungere una dipendenza dall'netty-nio-clientartefatto 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.17.290</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 per configurare le proprietà per l'istanza del client HTTP basata su Netty.

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

Se devi configurare un'istanza diNettyNioAsyncHttpClient, ti consigliamo di creare un'NettyNioAsyncHttpClientistanza dedicata. 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'NettyNioAsyncHttpClientistanza non viene chiusa quando non è più necessaria.

L'esempio seguente crea un'DynamoDbAsyncClientistanza che viene utilizzata da un'istanza. DynamoDbEnhancedAsyncClient L'DynamoDbAsyncClientistanza contiene l'NettyNioAsyncHttpClientistanza con connectionTimeout e maxConcurrency i valori. L'istanza HTTP 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'NettyNioAsyncHttpClientistanza

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 connessioni HTTP verrà condiviso, il che riduce l'utilizzo delle risorse.

Nota

Quando un'NettyNioAsyncHttpClientistanza è 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 client HTTP basato su Netty utilizzato da due client di servizio. L'NettyNioAsyncHttpClientistanza configurata viene passata al httpClient metodo di ogni builder. Quando i client di servizio e il client HTTP non sono più necessari, il codice li chiude esplicitamente. Il codice chiude per ultimo il client 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 client HTTP Netty.

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 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 nettyHttpClient = NettyNioAsyncHttpClient.builder() .proxyConfiguration(ProxyConfiguration.builder() .useSystemPropertyValues(Boolean.FALSE) .build()) .build(); // Run the application. // $ java -cp ... App