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 HTTP baseado em URLConnection
O AWS SDK for Java 2.x oferece um cliente UrlConnectionHttpClient
HTTP mais leve em comparação com o padrão. ApacheHttpClient
O UrlConnectionHttpClient
é baseado no URLConnection
do Java.
O UrlConnectionHttpClient
é carregado mais rapidamente do que o cliente HTTP baseado em Apache, mas tem menos recursos. Por carregar mais rapidamente, é uma boa solução para funções AWS Lambda
do Java.
O UrlConnectionHttpClient
possui várias opções configuráveis
nota
O UrlConnectionHttpClient
não é compatível com o método HTTP PATCH.
Algumas operações de AWS API exigem solicitações de PATCH. Esses nomes de operação geralmente começam com Update*
. Veja alguns exemplos a seguir.
-
Várias
Update*
operações na AWS Security Hub API e também a BatchUpdateFindingsoperação -
Todas as operações
Update*
da API do Amazon API Gateway -
Várias
Update*
operações na WorkDocs API da Amazon
Se você puder usar oUrlConnectionHttpClient
, primeiro consulte a Referência da API para o Serviço da AWS que você está usando. Verifique se as operações necessárias usam a operação PATCH.
Acesse o UrlConnectionHttpClient
Para configurar e usar o UrlConnectionHttpClient
, você declara uma dependência do artefato url-connection-client
do Maven em seu arquivo pom.xml
.
Ao contrário do ApacheHttpClient
, o UrlConnectionHttpClient
não é adicionado automaticamente ao seu projeto; portanto, quando usado, ele deve ser declarado especificamente.
O exemplo de arquivo pom.xml
a seguir mostra as dependências necessárias para usar e configurar o cliente HTTP.
<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> <!-- other dependencies such as s3 or dynamodb --> <dependencies> <dependency> <groupId>software.amazon.awssdk</groupId> <artifactId>url-connection-client</artifactId> </dependency> </dependencies>
Usar e configurar o UrlConnectionHttpClient
Você pode configurar uma instância do UrlConnectionHttpClient
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 UrlConnectionHttpClient.Builder
Prática recomendada: dedicar uma instância do UrlConnectionHttpClient
a um cliente de serviço
Se você precisar configurar uma instância do UrlConnectionHttpClient
, recomendamos que você crie a instância UrlConnectionHttpClient
dedicada. Faça isso usando o método httpClientBuilder
do builder do cliente do serviço. Dessa forma, o ciclo de vida do cliente HTTP é gerenciado pelo SDK, o que ajuda a evitar possíveis vazamentos de memória se a instância do UrlConnectionHttpClient
não for fechada quando não for mais necessária.
O exemplo a seguir cria umS3Client
e configura a instância embutida do UrlConnectionHttpClient
com os valores socketTimeout
e proxyConfiguration
. O método proxyConfiguration
usa uma expressão lambda Java do tipo Consumer<ProxyConfiguration.Builder
.
Importações
import software.amazon.awssdk.http.SdkHttpClient; import software.amazon.awssdk.http.urlconnection.UrlConnectionHttpClient; import java.net.URI; import java.time.Duration;
Código
// Singleton: Use the s3Client for all requests. S3Client s3Client = S3Client.builder() .httpClientBuilder(UrlConnectionHttpClient.builder() .socketTimeout(Duration.ofMinutes(5)) .proxyConfiguration(proxy -> proxy.endpoint(URI.create("http://proxy.mydomain.net:8888")))) .credentialsProvider(EnvironmentVariableCredentialsProvider.create()) .build(); // Perform work with the s3Client. s3Client.close(); // Requests completed: Close the s3client.
Abordagem alternativa: compartilhar uma instância do UrlConnectionHttpClient
Para ajudar a reduzir o uso de recursos e memória do seu aplicativo, você pode configurar um UrlConnectionHttpClient
e compartilhá-lo entre vários clientes de serviço. O pool de conexões HTTP será compartilhado, o que reduz o uso de recursos.
nota
Quando uma instância do UrlConnectionHttpClient
é compartilhada, você deve fechá-la quando ela estiver pronta para ser descartada. O SDK não fechará a instância quando o cliente de serviço for fechado.
O exemplo a seguir configura um cliente HTTP baseado em URLConnection, que é usado por dois clientes de serviço. A instância UrlConnectionHttpClient
configurada é transmitida ao método httpClient
de cada criador. Quando os clientes do serviço e o cliente HTTP não são mais necessários, o código os fecha explicitamente. O código fecha o cliente HTTP por último.
Importações
import software.amazon.awssdk.auth.credentials.EnvironmentVariableCredentialsProvider; import software.amazon.awssdk.awscore.defaultsmode.DefaultsMode; import software.amazon.awssdk.http.SdkHttpClient; import software.amazon.awssdk.http.urlconnection.ProxyConfiguration; import software.amazon.awssdk.http.urlconnection.UrlConnectionHttpClient; import software.amazon.awssdk.services.dynamodb.DynamoDbClient; import software.amazon.awssdk.services.s3.S3Client; import java.net.URI; import java.time.Duration;
Código
SdkHttpClient urlHttpClient = UrlConnectionHttpClient.create(); // Singletons: Use the s3Client and dynamoDbClient for all requests. S3Client s3Client = S3Client.builder() .httpClient(urlHttpClient) .defaultsMode(DefaultsMode.IN_REGION) .credentialsProvider(EnvironmentVariableCredentialsProvider.create()) .build(); DynamoDbClient dynamoDbClient = DynamoDbClient.builder() .httpClient(urlHttpClient) .defaultsMode(DefaultsMode.IN_REGION) .credentialsProvider(EnvironmentVariableCredentialsProvider.create()) .build(); // Perform work with the s3Client and dynamoDbClient. // Requests completed: Close all service clients. s3Client.close(); dynamoDbClient.close(); urlHttpClient.close();
Ao usar o UrlConnectionHttpClient
na aplicação, é necessário fornecer a cada cliente de serviço uma instância URLConnectionHttpClient
ou ApacheHttpClient
usando o método httpClientBuilder
do criador do cliente de serviço.
Uma exceção ocorre se o programa usar vários clientes do serviço e estas duas condições forem verdadeiras:
-
Um cliente de serviço está configurado para usar uma instância do
UrlConnectionHttpClient
-
Outro cliente de serviço usa o
ApacheHttpClient
padrão sem criá-lo explicitamente com os métodoshttpClient()
ouhttpClientBuilder()
A exceção indicará que várias implementações HTTP foram encontradas no caminho de classe.
O exemplo de trecho de código a seguir leva a uma exceção.
// The dynamoDbClient uses the UrlConnectionHttpClient DynamoDbClient dynamoDbClient = DynamoDbClient.builder() .httpClient(UrlConnectionHttpClient.create()) .build(); // The s3Client below uses the ApacheHttpClient at runtime, without specifying it. // An SdkClientException is thrown with the message that multiple HTTP implementations were found on the classpath. S3Client s3Client = S3Client.create(); // Perform work with the s3Client and dynamoDbClient. dynamoDbClient.close(); s3Client.close();
Evite a exceção configurando explicitamente o S3Client
com um ApacheHttpClient
.
DynamoDbClient dynamoDbClient = DynamoDbClient.builder() .httpClient(UrlConnectionHttpClient.create()) .build(); S3Client s3Client = S3Client.builder() .httpClient(ApacheHttpClient.create()) // Explicitly build the ApacheHttpClient. .build(); // Perform work with the s3Client and dynamoDbClient. dynamoDbClient.close(); s3Client.close();
nota
Para criar explicitamente o ApacheHttpClient
, você deve adicionar uma dependência do artefato apache-client
em seu arquivo de projeto do Maven.
Exemplo de configuração do proxy
O trecho de código a seguir usa o builder de configuração de proxy para o cliente HTTP da conexão do URL
SdkHttpClient urlHttpClient = UrlConnectionHttpClient.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 = UrlConnectionHttpClient.builder() .proxyConfiguration(ProxyConfiguration.builder() .useSystemPropertyValues(Boolean.FALSE) .build()) .build(); // Run the application. // $ java -cp ... App
nota
Atualmente, o cliente HTTP baseado em URLConnection não oferece suporte às propriedades do sistema proxy HTTPS ou à variável de ambiente HTTPS_PROXY.