本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
在 中設定 HTTP 用戶端 AWS SDK for Java 2.x
您可以變更 HTTP 用戶端以用於您的服務用戶端,以及使用 變更 HTTP 用戶端的預設組態 AWS SDK for Java 2.x。本節討論 開發套件的 HTTP 用戶端和設定。
適用於 Java 的 開發套件中可用的 HTTP 用戶端
同步用戶端
適用於 Java 的 SDK 中的同步 HTTP 用戶端實作 SdkHttpClientS3Client或 DynamoDbClient,需要使用同步 HTTP 用戶端。 適用於 Java 的 AWS SDK 提供三個同步 HTTP 用戶端。
- ApacheHttpClient (預設)
-
ApacheHttpClient
是同步服務用戶端的預設 HTTP 用戶端。如需設定 的資訊 ApacheHttpClient,請參閱 設定 Apache 型 HTTP 用戶端。 - AwsCrtHttpClient
-
AwsCrtHttpClient
提供高輸送量和非封鎖 IO。它建置在 AWS 通用執行期 (CRT) Http 用戶端上。如需設定 AwsCrtHttpClient並搭配 服務用戶端使用的資訊,請參閱 設定 AWS CRT 型 HTTP 用戶端。 - UrlConnectionHttpClient
-
若要將應用程式使用的 jar 和第三方程式庫數量降至最低,您可以使用 UrlConnectionHttpClient
。如需設定 的資訊 UrlConnectionHttpClient,請參閱 設定 URLConnection 型 HTTP 用戶端。
非同步用戶端
適用於 Java 的 SDK 中的非同步 HTTP 用戶端實作 SdkAsyncHttpClientS3AsyncClient或 DynamoDbAsyncClient,需要使用非同步 HTTP 用戶端。 適用於 Java 的 AWS SDK 提供兩個非同步 HTTP 用戶端。
- NettyNioAsyncHttpClient (預設)
-
NettyNioAsyncHttpClient
是非同步用戶端使用的預設 HTTP 用戶端。如需設定 的資訊 NettyNioAsyncHttpClient,請參閱 設定 Netty 型 HTTP 用戶端。 - AwsCrtAsyncHttpClient
-
AwsCrtAsyncHttpClient
是以 AWS 通用執行期 (CRT) HTTP 用戶端為基礎。如需設定 的資訊 AwsCrtAsyncHttpClient,請參閱 設定 AWS CRT 型 HTTP 用戶端。
HTTP 用戶端建議
當您選擇 HTTP 用戶端實作時,有幾個因素發揮作用。使用下列資訊來協助您做出決定。
建議流程圖
下列流程圖提供一般指引,協助您判斷要使用的 HTTP 用戶端。
HTTP 用戶端比較
下表提供每個 HTTP 用戶端的詳細資訊。
| HTTP 用戶端 | 同步或非同步 | 使用情況 | 限制/撤回 |
|---|---|---|---|
| Apache 型 HTTP 用戶端 (預設同步 HTTP 用戶端) |
Sync | 如果您偏好低延遲而非高輸送量,請使用它 | 與其他 HTTP 用戶端相比,啟動時間較慢 |
| URLConnection 型 HTTP 用戶端 | Sync | 如果您有限制第三方相依性的硬性需求,請使用它 | 不支援 HTTP PATCH 方法,某些 APIS 需要此方法,例如 Amazon APIGateway Update 操作 |
| AWS CRT 型同步 HTTP 用戶端1 | Sync |
• 如果您的應用程式在 中執行,請使用它 AWS Lambda • 如果您偏好高輸送量而非低延遲,請使用它 • 如果您偏好同步 SDK 用戶端,請使用它 |
不支援下列 Java 系統屬性:
|
| Netty 型 HTTP 用戶端 (預設非同步 HTTP 用戶端) |
非同步 |
• 如果您的應用程式調用需要 HTTP/2 支援的 APIs,例如 Kinesis API SubscribeToShard,請使用它 |
與其他 HTTP 用戶端相比,啟動時間較慢 |
| AWS 以 CRT 為基礎的非同步 HTTP 用戶端1 | 非同步 | • 如果您的應用程式在 中執行,請使用它 AWS Lambda • 如果您偏好高輸送量而非低延遲,請使用它 • 如果您偏好非同步 SDK 用戶端,請使用它 |
• 不支援需要 HTTP/2 支援的服務用戶端,例如 不支援下列 Java 系統屬性:
|
1由於其新增優點,我們建議您盡可能使用 AWS CRT 型 HTTP 用戶端。
智慧組態預設值
AWS SDK for Java 2.x (2.17.102 版或更新版本) 提供智慧型組態預設功能。此功能可最佳化兩個 HTTP 用戶端屬性,以及其他不會影響 HTTP 用戶端的屬性。
智慧組態預設值會根據您提供的預設模式值,設定 connectTimeoutInMillis和 tlsNegotiationTimeoutInMillis 屬性的合理值。您可以根據應用程式的特性選擇預設模式值。
如需智慧組態預設值以及如何選擇最適合您應用程式的預設模式值的詳細資訊,請參閱 AWS SDKs和工具參考指南。
以下是為您的應用程式設定預設模式的四種方法。
如果您使用系統屬性、環境變數或 AWS 組態檔案全域設定預設模式,您可以在建置 HTTP 用戶端時覆寫設定。
當您使用 httpClientBuilder()方法建置 HTTP 用戶端時,設定僅適用於您正在建置的執行個體。此處顯示範例。此範例中的 Netty 型 HTTP 用戶端會覆寫 connectTimeoutInMillis和 全域設定的任何預設模式值tlsNegotiationTimeoutInMillis。