本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
HTTP 用戶端組態
根據預設, 適用於 Kotlin 的 AWS SDK 會使用以 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
Code
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
Code
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. }
引擎類型的可能值為 OkHttpEngine、 OkHttp4Engine和 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 用戶端在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
Code
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
Code
S3Client.fromEnvironment { httpEngine(OkHttpEngine) { connectionIdlePollingInterval = 50.milliseconds } }.use { s3 -> // Use the Amazon S3 client }