本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
HTTP 用戶端
您可以變更HTTP用戶端以用於您的服務用戶端,以及變更HTTP用戶端的預設組態 AWS SDK for Java 2.x。本節討論 的HTTP用戶端和設定SDK。
HTTP 適用於 Java SDK 的 中可用的用戶端
同步用戶端
SDK 適用於 Java 的 中的同步HTTP用戶端實作 SdkHttpClientS3Client
或 DynamoDbClient
,需要使用同步HTTP用戶端。 AWS SDK for Java 提供三個同步HTTP用戶端。
- ApacheHttpClient (預設)
-
ApacheHttpClient
是同步服務HTTP用戶端的預設用戶端。如需有關設定 的資訊 ApacheHttpClient
,請參閱 設定 Apache 型HTTP用戶端。 - AwsCrtHttpClient
-
AwsCrtHttpClient
提供高輸送量和非封鎖 IO。其建置於 AWS Common Runtime (CRT) Http Client。如需設定 AwsCrtHttpClient
和與服務用戶端搭配使用的資訊,請參閱 Configure AWS CRT 型 HTTP 用戶端。 - UrlConnectionHttpClient
-
若要減少應用程式使用的 jar 和第三方程式庫數量,您可以使用 UrlConnectionHttpClient
。如需有關設定 的資訊 UrlConnectionHttpClient
,請參閱 設定 URLConnection型HTTP用戶端。
非同步用戶端
SDK 適用於 Java 的 中的非同步HTTP用戶端會實作 SdkAsyncHttpClientS3AsyncClient
或 DynamoDbAsyncClient
,需要使用非同步HTTP用戶端。 AWS SDK for Java 提供兩個非同步HTTP用戶端。
- NettyNioAsyncHttpClient (預設)
-
NettyNioAsyncHttpClient
是非同步HTTP用戶端使用的預設用戶端。如需有關設定 的資訊 NettyNioAsyncHttpClient
,請參閱 設定 Netty 型HTTP用戶端。 - AwsCrtAsyncHttpClient
-
AwsCrtAsyncHttpClient
是以 AWS Common Runtime (CRT) HTTP用戶端為基礎。如需有關設定 的資訊 AwsCrtAsyncHttpClient
,請參閱 Configure AWS CRT 型 HTTP 用戶端。
HTTP 用戶端建議
當您選擇HTTP用戶端實作時,有幾個因素發揮作用。使用下列資訊協助您決定。
建議流程圖
下列流程圖提供一般指引,協助您決定要使用的HTTP用戶端。
HTTP 用戶端比較
下表提供每個HTTP用戶端的詳細資訊。
HTTP 用戶端 | 同步或非同步 | 使用情況 | 限制/撤回 |
---|---|---|---|
Apache 型HTTP用戶端 (預設同步HTTP用戶端) |
Sync | 如果您偏好低延遲而非高輸送量,請使用它 | 與其他HTTP用戶端相比,啟動時間較慢 |
URLConnection型HTTP用戶端 | Sync | 如果您有限制第三方相依性的嚴格要求,請使用它 | 不支援 方法,其中一些 需要此HTTPPATCH方法,APIS例如 Amazon APIGateway Update 操作 |
AWS CRT型同步HTTP用戶端1 | Sync |
• 如果您的應用程式在 中執行,請使用它 AWS Lambda • 如果您偏好高輸送量而非低延遲,請使用它 • 如果您偏好同步SDK用戶端,請使用它 |
不支援下列 Java 系統屬性:
|
Netty 型HTTP用戶端 (預設非同步HTTP用戶端) |
非同步 |
• 如果您的應用程式叫用需要 HTTP/2 支援的 ,例如 KinesisAPIs,請使用它 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
。