As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.
Configurar o cliente baseado em Netty HTTP
O HTTP cliente padrão para operações assíncronas no AWS SDK for Java 2.x é o baseado em Netty. NettyNioAsyncHttpClient
Como HTTP cliente alternativo, você pode usar o novo HTTPcliente AWS CRT baseado. Este tópico mostra como configurar o NettyNioAsyncHttpClient
.
Acesse o NettyNioAsyncHttpClient
Na maioria das situações, você usa o NettyNioAsyncHttpClient
sem nenhuma configuração explícita em programas assíncronos. Você declara seus clientes de serviço assíncronos e os SDK configurará NettyNioAsyncHttpClient
com valores padrão para você.
Se você quiser configurar o NettyNioAsyncHttpClient
explicitamente ou usá-lo com vários clientes de serviço, precisará disponibilizá-lo para configuração.
Nenhuma configuração necessária
Quando você declara uma dependência de um cliente de serviço no Maven, SDK adiciona uma dependência de tempo de execução ao artefato. netty-nio-client
Isso torna a classe NettyNioAsyncHttpClient
disponível para o código em runtime, mas não no momento da compilação. Se você não estiver configurando o HTTP cliente baseado em Netty, não precisará especificar uma dependência para ele.
No seguinte XML trecho de um pom.xml
arquivo Maven, a dependência declarada com traz <artifactId>dynamodb-enhanced</artifactId>
transitivamente o cliente baseado em Netty. HTTP Você não precisa declarar uma dependência especificamente para isso.
<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>
Com essas dependências, você não pode fazer nenhuma alteração na HTTP configuração, pois a NettyNioAsyncHttpClient
biblioteca está apenas no caminho de classe do tempo de execução.
Configuração necessária
Para configurar o NettyNioAsyncHttpClient
, você precisa adicionar uma dependência no artefato netty-nio-client
em tempo de compilação.
Consulte o exemplo a seguir de um arquivo pom.xml
do Maven para configurar o 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>
Usar e configurar o NettyNioAsyncHttpClient
Você pode configurar uma instância do NettyNioAsyncHttpClient
junto com a criação de um cliente de serviço ou pode configurar uma única instância para compartilhar entre vários clientes de serviço.
Com qualquer abordagem, você usa o NettyNioAsyncHttpClient.Builder
Prática recomendada: dedicar uma instância NettyNioAsyncHttpClient
a um cliente de serviço
Se você precisar configurar uma instância do NettyNioAsyncHttpClient
, recomendamos criar uma instância NettyNioAsyncHttpClient
dedicada. Faça isso usando o método httpClientBuilder
do builder do cliente do serviço. Dessa forma, o ciclo de vida do HTTP cliente é gerenciado peloSDK, o que ajuda a evitar possíveis vazamentos de memória se a NettyNioAsyncHttpClient
instância não for fechada quando não for mais necessária.
O exemplo a seguir cria uma instância DynamoDbAsyncClient
, que também é usada por uma instância DynamoDbEnhancedAsyncClient
. A instância DynamoDbAsyncClient
contém a instância NettyNioAsyncHttpClient
com valores connectionTimeout
e maxConcurrency
. A HTTP instância é criada usando o httpClientBuilder
método deDynamoDbAsyncClient.Builder
.
Importações
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;
Código
// 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();
Abordagem alternativa: compartilhar uma instância NettyNioAsyncHttpClient
Para ajudar a reduzir o uso de recursos e memória do seu aplicativo, você pode configurar um NettyNioAsyncHttpClient
e compartilhá-lo entre vários clientes de serviço. O pool de HTTP conexões será compartilhado, o que reduz o uso de recursos.
nota
Quando uma instância NettyNioAsyncHttpClient
é compartilhada, você deve fechá-la quando ela estiver pronta para ser descartada. Não SDK fechará a instância quando o cliente do serviço for fechado.
O exemplo a seguir configura um HTTP cliente baseado em Netty que é usado por dois clientes de serviço. A instância NettyNioAsyncHttpClient
configurada é transmitida ao método httpClient
de cada criador. Quando os clientes do serviço e o HTTP cliente não são mais necessários, o código os fecha explicitamente. O código fecha o HTTP cliente por último.
Importações
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;
Código
// 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.
Exemplo de configuração do proxy
O trecho de código a seguir usa o construtor de configuração de proxy para o cliente 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();
As propriedades equivalentes do sistema Java para a configuração do proxy são mostradas no trecho da linha de comando a seguir.
$ java -Dhttps.proxyHost=myproxy -Dhttps.proxyPort=1234 -Dhttps.proxyUser=username \ -Dhttps.proxyPassword=password -Dhttp.nonProxyHosts=localhost|host.example.com -cp ... App
Importante
Para usar qualquer uma das propriedades do sistema HTTPS proxy, a scheme
propriedade deve ser definida no código comohttps
. Se a propriedade do esquema não estiver definida no código, o esquema assumirá como padrão HTTP e procurará somente as SDK propriedades http.*
do sistema.
A configuração equivalente que usa variáveis de 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