Configuração do cliente HTTP - AWS SDK para Kotlin

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á.

Configuração do cliente HTTP

Por padrão, o AWS SDK para Kotlin usa um cliente HTTP baseado em OkHttp. Você pode substituir o cliente HTTP e sua configuração fornecendo um cliente explicitamente configurado.

Atenção

Independentemente de qual mecanismo HTTP você usa, outras dependências em seu projeto podem ter dependências transitivas que entram em conflito com a versão específica do mecanismo exigida pelo SDK. Em particular, estruturas como o Spring Boot são conhecidas por gerenciar dependências OkHttp e confiar em versões mais antigas do que o SDK. Consulte Como faço para resolver conflitos de dependência? para obter mais informações.

nota

Por padrão, cada cliente de serviço usa sua própria cópia de um cliente HTTP. Se você usa vários serviços em seu aplicativo, talvez queira criar um único cliente HTTP e compartilhá-lo com todos os clientes de serviço.

Configuração básica

Ao configurar um cliente de serviço, você pode configurar o tipo de mecanismo padrão. O SDK gerencia o mecanismo do cliente HTTP resultante e o fecha automaticamente quando não é mais necessário.

O exemplo a seguir mostra a configuração de um cliente HTTP durante a inicialização de um cliente do DynamoDB.

Importações

import aws.sdk.kotlin.services.dynamodb.DynamoDbClient import kotlin.time.Duration.Companion.seconds

Código

DynamoDbClient { region = "us-east-2" httpClient { maxConcurrency = 64u connectTimeout = 10.seconds } }.use { ddb -> // Perform some actions with Amazon DynamoDB. }

Configurações avançadas

A configuração HTTP padrão é adequada para a maioria dos casos de uso. Para alguns casos de uso avançados, como ambientes de alto rendimento, as seguintes opções de configuração avançada fornecem recursos e capacidades adicionais:

Especifique um tipo de mecanismo HTTP

Para especificar um tipo de mecanismo HTTP não padrão ou para personalizar a configuração específica de um determinado tipo de mecanismo HTTP, você pode passar um parâmetro adicional httpClient que especifique o tipo de mecanismo.

O exemplo a seguir especifica o OkHttpEngineque você pode usar para configurar a maxConcurrencyPerHostpropriedade.

Importações

import aws.sdk.kotlin.services.dynamodb.DynamoDbClient import aws.smithy.kotlin.runtime.http.engine.okhttp.OkHttpEngine

Código

DynamoDbClient { region = "us-east-2" httpClient(OkHttpEngine) { // The first parameter specifies the HTTP engine type. // The following parameter is generic HTTP configuration available in any engine type. maxConcurrency = 64u // The following parameter is OkHttp-specific configuration. maxConcurrencyPerHost = 32u } }.use { ddb -> // Perform some actions with Amazon DynamoDB. }

Os valores possíveis para o tipo de motor são OkHttpEngine OkHttp4Engine, CrtHttpEnginee.

Para usar parâmetros de configuração específicos de um mecanismo HTTP, você deve adicionar o mecanismo como uma dependência em tempo de compilação. Para oOkHttpEngine, você adiciona a seguinte dependência usando o Gradle.

(Você pode navegar até o X.Y.Z link para ver a versão mais recente disponível.)

implementation(platform("aws.smithy.kotlin:bom:X.Y.Z")) implementation("aws.smithy.kotlin:http-client-engine-okhttp")

Para oCrtHttpEngine, adicione a seguinte dependência.

implementation(platform("aws.smithy.kotlin:bom:X.Y.Z")) implementation("aws.smithy.kotlin:http-client-engine-crt")

Usar a OkHttp4Engine

Use o OkHttp4Engine se você não puder usar o padrãoOkHttpEngine. O GitHub repositório smithy-kotlin tem informações sobre como você configura e usa o. OkHttp4Engine

Use um cliente HTTP explícito

Quando você usa um cliente HTTP explícito, você é responsável por sua vida útil, incluindo o fechamento quando não precisa mais dele. Um cliente HTTP deve durar pelo menos tanto quanto qualquer cliente de serviço que o use.

O exemplo de código a seguir mostra o código que mantém o cliente HTTP ativo enquanto o DynamoDbClient está ativo. A usefunção garante que o cliente HTTP feche corretamente.

Importações
import aws.sdk.kotlin.services.dynamodb.DynamoDbClient import aws.smithy.kotlin.runtime.http.engine.okhttp.OkHttpEngine import kotlin.time.Duration.Companion.seconds
Código
OkHttpEngine { maxConcurrency = 64u connectTimeout = 10.seconds }.use { okHttpClient -> DynamoDbClient { region = "us-east-2" httpClient = okHttpClient }.use { ddb -> { // Perform some actions with Amazon DynamoDB. } } }

Monitoramento de conexão ociosa

OkHttpEnginefornece a opção connectionIdlePollingIntervalde configuração para monitorar conexões ociosas para fechamento remoto. Esse recurso detecta quando os serviços têm conexões fechadas que ainda estão no pool de conexões, evitando erros nas solicitações subsequentes.

Quando connectionIdlePollingInterval definido como um valor não nulo, o mecanismo pesquisa as conexões que são liberadas de volta para o pool de conexões. O processo de pesquisa realiza leituras de bloqueio com o tempo limite do soquete definido para o intervalo especificado. A pesquisa é cancelada automaticamente quando o motor adquire a conexão do pool ou quando a conexão é despejada e fechada.

Quando esse valor é null (o padrão), a pesquisa é desativada. Conexões ociosas no pool que são fechadas remotamente podem encontrar erros ao serem adquiridas para chamadas subsequentes.

nota

Como o ciclo de pesquisa usa leituras de bloqueio, as chamadas do mecanismo para adquirir ou fechar uma conexão podem ser atrasadas tanto quanto o connectionIdlePollingInterval intervalo. Escolher um valor baixo para o intervalo significa que o SDK adquirirá conexões mais rapidamente, às custas de um maior uso de recursos ociosos.

Importações

import aws.sdk.kotlin.services.s3.S3Client import aws.smithy.kotlin.runtime.http.engine.okhttp.OkHttpEngine import kotlin.time.Duration.Companion.milliseconds

Código

S3Client.fromEnvironment { httpEngine(OkHttpEngine) { connectionIdlePollingInterval = 50.milliseconds } }.use { s3 -> // Use the Amazon S3 client }