Configurar clientes HTTP no AWS SDK for Java 2.x
É possível alterar o cliente HTTP a ser usado para o cliente de serviço, bem como alterar a configuração padrão para clientes HTTP com o AWS SDK for Java 2.x. Esta seção discute os clientes HTTP e as configurações do SDK.
Clientes HTTP disponíveis no SDK para Java
Clientes síncronos
Clientes HTTP síncronos no SDK para Java implementam a interface SdkHttpClientS3Client ou o DynamoDbClient, requer o uso de um cliente HTTP síncrono. O AWS SDK para Java oferece três clientes HTTP síncronos.
- ApacheHttpClient (padrão)
-
ApacheHttpClient
é o cliente HTTP padrão para clientes de serviços síncronos. Para obter mais informações sobre a configuração do ApacheHttpClient, consulte Configurar o cliente HTTP baseado em Apache. - AwsCrtHttpClient
-
O AwsCrtHttpClient
fornece alto throughput e E/S sem bloqueio. Ele é desenvolvido com base no cliente HTTP AWS Common Runtime (CRT). Para receber informações sobre como configurar o AwsCrtHttpCliente usá-lo com clientes de serviço, consulte Configurar os clientes HTTP baseados em AWS CRT. - UrlConnectionHttpClient
-
Para minimizar o número de jars e bibliotecas de terceiros utilizados pela aplicação, é possível usar o UrlConnectionHttpClient
. Para obter mais informações sobre a configuração do UrlConnectionHttpClient, consulte Configurar o cliente HTTP baseado em URLConnection.
Clientes assíncronos
Clientes HTTP assíncronos no SDK para Java implementam a interface SdkAsyncHttpClientS3AsyncClient ou o DynamoDbAsyncClient, requer o uso de um cliente HTTP assíncrono. O AWS SDK para Java oferece dois clientes HTTP síncronos.
- NettyNioAsyncHttpClient (padrão)
-
NettyNioAsyncHttpClient
é o cliente HTTP padrão usado por clientes assíncronos. Para obter mais informações sobre a configuração do NettyNioAsyncHttpClient, consulte Configurar o cliente HTTP baseado em Netty. - AwsCrtAsyncHttpClient
-
O AwsCrtAsyncHttpClient
é baseado no cliente HTTP do AWS Common Runtime (CRT). Para obter mais informações sobre a configuração do AwsCrtAsyncHttpClient, consulte Configurar os clientes HTTP baseados em AWS CRT.
Recomendações do cliente HTTP
Diversos fatores entram em cena quando você escolhe uma implementação de cliente HTTP. Use as informações a seguir para ajudá-lo a decidir.
Fluxograma de recomendação
O fluxograma a seguir fornece orientação geral para ajudá-lo a determinar qual cliente HTTP usar.
Comparação de clientes HTTP
A tabela a seguir contém informações detalhadas para cada cliente HTTP.
| Cliente HTTP | Síncrono ou assíncrono | Quando usar | Limitação/desvantagem |
|---|---|---|---|
| Cliente HTTP baseado em Apache (cliente HTTP síncrono padrão) |
Síncrono | Use-o se você preferir baixa latência em vez de alta taxa de transferência | Tempo de inicialização mais lento em comparação com outros clientes HTTP |
| Cliente HTTP baseado em URLConnection | Síncrono | Use-o se você tiver um requisito rígido de limitar dependências de terceiros | Não é compatível com o método HTTP PATCH, exigido por algumas APIS, como as operações Update do Amazon APIGateway |
| Cliente HTTP síncrono baseado em AWS CRT1 | Síncrono |
• Use-o se seu aplicativo estiver sendo executado no AWS Lambda • Use-o se você preferir alta taxa de transferência em vez de baixa latência • Use-o se preferir clientes do SDK síncronos. |
As seguintes propriedades do sistema Java não são compatíveis:
|
| Cliente HTTP baseado em Netty (cliente HTTP síncrono padrão) |
Assíncrono |
• Use-o se seu aplicativo invocar APIs que exijam suporte a HTTP/2, como a API SubscribeToShard da Kinesis |
Tempo de inicialização mais lento em comparação com outros clientes HTTP |
| Cliente HTTP assíncrono baseado em AWS CRT1 | Assíncrono | • Use-o se seu aplicativo estiver sendo executado no AWS Lambda • Use-o se você preferir alta taxa de transferência em vez de baixa latência • Use-o se preferir clientes do SDK assíncronos. |
• Não oferece suporte a clientes de serviços que exigem suporte HTTP/2, como As seguintes propriedades do sistema Java não são compatíveis:
|
1Devido aos benefícios adicionais, recomendamos que você use os clientes HTTP baseados em AWS CRT, se possível.
Padrões de configuração inteligentes
O AWS SDK for Java 2.x (versão 2.17.102 ou posterior) oferece um recurso de padrões de configuração inteligentes. Esse recurso otimiza duas propriedades do cliente HTTP além de outras propriedades que não afetam o cliente HTTP.
Os padrões de configuração inteligentes definem valores razoáveis para as propriedades connectTimeoutInMillis e tlsNegotiationTimeoutInMillis com base em um valor de modo padrão fornecido por você. Você escolhe o valor de modo padrão com base nas características do seu aplicativo.
Para obter mais informações sobre padrões de configuração inteligentes e como escolher o valor do modo padrão mais adequado para seus aplicativos, consulte o Guia de referência de SDKs e ferramentas da AWS.
A seguir estão quatro maneiras de definir o modo padrão para seu aplicativo.
Se você definir o modo padrão globalmente com a propriedade do sistema, a variável de ambiente ou o arquivo config da AWS, poderá substituir as configurações ao criar um cliente HTTP.
Quando você cria um cliente HTTP com o método httpClientBuilder(), as configurações se aplicam somente à instância que você está criando. Um exemplo disso é mostrado aqui. O cliente HTTP baseado em Netty neste exemplo substitui todos os valores de modo padrão definidos globalmente para connectTimeoutInMillis e tlsNegotiationTimeoutInMillis.