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 Apache HTTP
Clientes de serviços síncronos AWS SDK for Java 2.x usam um HTTP cliente baseado em Apache, por padrão. ApacheHttpClientApacheHttpClient
é baseado no Apache HttpClient
O SDK também oferece o UrlConnectionHttpClientUrlConnectionHttpClient
, consulte Configurar o HTTP cliente URLConnection baseado.
Para ver o conjunto completo de opções de configuração disponíveis para oApacheHttpClient
, consulte ApacheHttpClient.Builder e ProxyConfiguration.Builder
Acesse o ApacheHttpClient
Na maioria das situações, você usa o ApacheHttpClient
sem nenhuma configuração explícita. Você declara seus clientes de serviço e eles os SDK configurarão ApacheHttpClient
com valores padrão para você.
Se você quiser configurar o ApacheHttpClient
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, isso SDK adiciona uma dependência de tempo de execução ao artefato. apache-client
Isso torna a classe ApacheHttpClient
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 Apache, 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>s3</artifactId>
automaticamente o cliente baseado em Apache. 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> <!-- The s3 dependency automatically adds a runtime dependency on the ApacheHttpClient--> <dependency> <groupId>software.amazon.awssdk</groupId> <artifactId>s3</artifactId> </dependency> </dependencies>
Com essas dependências, você não pode fazer nenhuma alteração explícita na HTTP configuração, porque a ApacheHttpClient
biblioteca está somente no caminho de classe do tempo de execução.
Configuração necessária
Para configurar o ApacheHttpClient
, você precisa adicionar uma dependência na biblioteca apache-client
em tempo de compilação.
Consulte o exemplo a seguir de um arquivo pom.xml
do Maven para configurar o ApacheHttpClient
.
<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>s3</artifactId> </dependency> <!-- By adding the apache-client dependency, ApacheHttpClient will be added to the compile classpath so you can configure it. --> <dependency> <groupId>software.amazon.awssdk</groupId> <artifactId>apache-client</artifactId> </dependency> </dependencies>
Usar e configurar o ApacheHttpClient
Você pode configurar uma instância do ApacheHttpClient
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 ApacheHttpClient.Builder
para configurar as propriedades do cliente baseado em ApacheHTTP.
Prática recomendada: dedicar uma instância do ApacheHttpClient
a um cliente de serviço
Se você precisar configurar uma instância do ApacheHttpClient
, recomendamos que você crie a instância ApacheHttpClient
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 ApacheHttpClient
instância não for fechada quando não for mais necessária.
O exemplo a seguir cria umS3Client
e configura a instância embutida do ApacheHttpClient
com os valores maxConnections
e connectionTimeout
. A HTTP instância é criada usando o httpClientBuilder
método deS3Client.Builder
.
Importações
import software.amazon.awssdk.http.apache.ApacheHttpClient; import software.amazon.awssdk.services.s3.S3Client; import java.time.Duration;
Código
S3Client s3Client = S3Client // Singleton: Use the s3Client for all requests. .builder() .httpClientBuilder(ApacheHttpClient.builder() .maxConnections(100) .connectionTimeout(Duration.ofSeconds(5)) ).build(); // Perform work with the s3Client. s3Client.close(); // Requests completed: Close all service clients.
Abordagem alternativa: compartilhar uma instância do ApacheHttpClient
Para ajudar a reduzir o uso de recursos e memória do seu aplicativo, você pode configurar um ApacheHttpClient
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 do ApacheHttpClient
é 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 Apache que é usado por dois clientes de serviço. A instância ApacheHttpClient
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
SdkHttpClient apacheHttpClient = ApacheHttpClient.builder() .maxConnections(100).build(); // Singletons: Use the s3Client and dynamoDbClient for all requests. S3Client s3Client = S3Client.builder() .httpClient(apacheHttpClient).build(); DynamoDbClient dynamoDbClient = DynamoDbClient.builder() .httpClient(apacheHttpClient).build(); // Perform work with the s3Client and dynamoDbClient. // Requests completed: Close all service clients. s3Client.close(); dynamoDbClient.close(); apacheHttpClient.close(); // Explicitly close apacheHttpClient.
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 Apache
SdkHttpClient apacheHttpClient = ApacheHttpClient.builder() .proxyConfiguration(ProxyConfiguration.builder() .endpoint(URI.create("http://example.com:1234")) .username("username") .password("password") .addNonProxyHost("localhost") .addNonProxyHost("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 -Dhttp.proxyHost=example.com -Dhttp.proxyPort=1234 -Dhttp.proxyUser=username \ -Dhttp.proxyPassword=password -Dhttp.nonProxyHosts=localhost|host.example.com -cp ... App
A configuração equivalente que usa variáveis de 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 = ApacheHttpClient.builder() .proxyConfiguration(ProxyConfiguration.builder() .useSystemPropertyValues(Boolean.FALSE) .build()) .build(); // Run the application. // $ java -cp ... App
nota
Atualmente, o HTTP cliente Apache não oferece suporte às propriedades do sistema HTTPS proxy ou à variável de PROXY ambiente HTTPS _.