本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
HTTP 客户端配置
默认情况下, 适用于 Kotlin 的 AWS SDK 使用基于的 HTTP 客户端OkHttp
警告
无论您使用哪个 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引擎类型的附加参数。
以下示例指定了可用于配置OkHttpEngine该maxConcurrencyPerHost属性的内容。
导入
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如果不能使用默认值,请使用OkHttpEngine。smithy-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 }