HTTP 客户端配置 - 适用于 Kotlin 的 AWS SDK

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

HTTP 客户端配置

默认情况下, 适用于 Kotlin 的 AWS SDK 使用基于的 HTTP 客户端OkHttp。您可以通过提供明确配置的客户端来覆盖 HTTP 客户端及其配置。

警告

无论您使用哪个 HTTP 引擎,项目中的其他依赖项都可能具有传递依赖关系,这些依赖关系与 SDK 要求的特定引擎版本相冲突。特别是,众所周知,诸如Spring Boot之类的框架可以管理依赖关系, OkHttp并且依赖于比SDK更旧的版本。请参如何解决依赖冲突?阅,了解更多信息。

注意

默认情况下,每个服务客户端都使用自己的 HTTP 客户端副本。如果您在应用程序中使用多个服务,则可能需要构建一个 HTTP 客户端并在所有服务客户端之间共享该客户端。

基本配置

配置服务客户端时,可以配置默认引擎类型。SDK 管理生成的 HTTP 客户端引擎,并在不再需要时自动将其关闭。

以下示例显示了 DynamoDB 客户端初始化期间的 HTTP 客户端配置。

导入

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

代码

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

高级配置

默认 HTTP 配置适用于大多数用例。对于某些高级用例,例如高吞吐量环境,以下高级配置选项提供了其他特性和功能:

指定 HTTP 引擎类型

要指定非默认 HTTP 引擎类型或自定义特定于特定 HTTP 引擎类型的配置,可以向其中传递一个用于指定httpClient引擎类型的附加参数。

以下示例指定了可用于配置OkHttpEnginemaxConcurrencyPerHost属性的内容。

导入

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

代码

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

引擎类型的可能值为OkHttpEngineOkHttp4Engine、和CrtHttpEngine

要使用特定于 HTTP 引擎的配置参数,必须将该引擎添加为编译时依赖项。对于OkHttpEngine,您可以使用 Gradle 添加以下依赖项。

(您可以导航到该X.Y.Z链接以查看可用的最新版本。)

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

对于CrtHttpEngine,添加以下依赖关系。

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

使用 OkHttp4Engine

OkHttp4Engine如果不能使用默认值,请使用OkHttpEnginesmithy-kotlin GitHub 存储库包含有关如何配置和使用的信息。OkHttp4Engine

使用显式的 HTTP 客户端

当你使用显式 HTTP 客户端时,你要对其生命周期负责,包括在不再需要它时关闭。HTTP 客户端的存活时间必须至少与使用它的任何服务客户端一样长。

以下代码示例显示了在 HTTP 客户端处于活动状态时保持 HTTP 客户端保持活动DynamoDbClient状态的代码。该use函数可确保 HTTP 客户端正确关闭。

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

空闲连接监控

OkHttpEngine提供了用于监控空闲连接以进行远程关闭的connectionIdlePollingInterval配置选项。此功能可检测服务何时关闭了仍在连接池中的连接,从而防止后续请求出现错误。

当设置connectionIdlePollingInterval为非空值时,引擎会轮询释放回连接池的连接。轮询过程执行阻塞读取,套接字超时设置为指定的间隔。当引擎从池中获取连接或连接被逐出并关闭时,轮询会自动取消。

当此值为null(默认)时,轮询处于禁用状态。远程关闭的池中的空闲连接在为后续调用获取连接时可能会遇到错误。

注意

由于轮询循环使用阻塞读取,因此获取或关闭连接的引擎调用的延迟时间可能与connectionIdlePollingInterval间隔一样长。为间隔选择较低的值意味着 SDK 可以更快地获取连接,但会增加空闲资源使用量。

导入

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

代码

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