本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
HTTP 用戶端
您可以變更用於服務用戶端的 HTTP 用戶端,以及使用 AWS SDK for Java 2.x. 本節討論了 SDK 的 HTTP 用戶端和設定。
適用於 Java 的開發套件中可用的 HTTP 用戶端
同步用戶端
SDK for Java 中的同步 HTTP 客戶端實現了該SdkHttpClientS3Client
或) 需要使用同步 HTTP 用戶端。DynamoDbClient
提 AWS SDK for Java 供三個同步 HTTP 用戶端。
- ApacheHttpClient (預設值)
-
ApacheHttpClient
是同步服務用戶端的預設 HTTP 用戶端。如需有關配置的資訊 ApacheHttpClient
,請參閱設定以阿帕奇為基礎的 HTTP 用戶端。 - AwsCrtHttpClient
-
AwsCrtHttpClient
提供高吞吐量和非阻塞 IO。它是建立在 AWS 通用運行時(CRT)Http 客戶端上。如需有關配置 AwsCrtHttpClient
和搭配服務用戶端使用它的資訊,請參閱設定 AWS 基於 CRT 的 HTTP 用戶端。 - UrlConnectionHttpClient
-
若要盡量減少您應用程式使用的 jar 和協力廠商程式庫的數目,您可以使用 UrlConnectionHttpClient
. 如需有關配置的資訊 UrlConnectionHttpClient
,請參閱設定以網址連線為基礎的 HTTP 用戶端。
異步客戶端
Java 開發套件中的非同步 HTTP 用戶端會實作SdkAsyncHttpClientS3AsyncClient
或) 需要使用非同步 HTTP 用戶端。DynamoDbAsyncClient
AWS SDK for Java 提供了兩個非同步 HTTP 用戶端。
- NettyNioAsyncHttpClient (預設值)
-
NettyNioAsyncHttpClient
是非同步用戶端所使用的預設 HTTP 用戶端。如需有關配置的資訊 NettyNioAsyncHttpClient
,請參閱設定以網路為基礎的 HTTP 用戶端。 - AwsCrtAsyncHttpClient
-
以 AWS 通用執行階段 (CRT) HTTP 用戶端AwsCrtAsyncHttpClient
為基礎。如需有關配置的資訊 AwsCrtAsyncHttpClient
,請參閱設定 AWS 基於 CRT 的 HTTP 用戶端。
HTTP 用戶端建議
選擇 HTTP 用戶端實作時,會有幾個因素發揮作用。請使用下列資訊來協助您做出決定。
推薦流程圖
下列流程圖提供一般指引,協助您判斷要使用哪個 HTTP 用戶端。
![HTTP 用戶端建議的流程圖。](images/JavaDevGuide-HTTPflowchart-DI.png)
HTTP 用戶端比較
下表提供每個 HTTP 用戶端的詳細資訊。
客戶端 | 同步或異步 | 使用情況 | 限制/點 |
---|---|---|---|
基於阿帕奇的 HTTP 客戶端 (預設同步處理 HTTP 用戶端) |
Sync | 如果您希望低延遲而不是高輸送量,請使用它 | 與其他 HTTP 用戶端相比,啟動時間較慢 |
以網址連線為基礎的 HTTP 用戶端 | Sync | 如果您對限制第三方依賴關係有困難的要求,請使用它 | 不支援某些 API 所需的 HTTP 修補程式方法,例如 Amazon ApiGateway 更新操作 |
AWS 基於 CRT 的同步 HTTP 客戶端 1 | Sync |
• 如果您的應用程序正在運行,請使用它 AWS Lambda • 如果您希望高吞吐量而不是低延遲,請使用它 • 如果您喜歡同步 SDK 客戶端,請使用它 |
N/A |
基於網絡的 HTTP 客戶端 (默認的異步 HTTP 客戶端) |
非同步 |
• 如果您的應用程式叫用需要 HTTP/2 支援的 API (例如 Kinesis API),請使用此功能 SubscribeToShard |
與其他 HTTP 用戶端相比,啟動時間較慢 |
AWS 基於 CRT 的異步 HTTP 客戶端 1 | 非同步 | • 如果您的應用程序正在運行,請使用它 AWS Lambda • 如果您希望高吞吐量而不是低延遲,請使用它 • 如果您喜歡異步 SDK 客戶端,請使用它 |
• 不支援需要 HTTP/2 支援的服務用戶端,例如和 |
1 由於其額外的好處,我們建議您盡可能使用 AWS 以 CRT 為基礎的 HTTP 用戶端。
智慧型組態預設
AWS SDK for Java 2.x (版本 2.17.102 或更新版本)提供智慧型組態預設功能。此功能會最佳化兩個 HTTP 用戶端屬性,以及不會影響 HTTP 用戶端的其他屬性。
智慧型組態預設值會根據您提供的預設模式值,為connectTimeoutInMillis
和tlsNegotiationTimeoutInMillis
屬性設定合理的值。您可以根據應用程式的特性來選擇預設模式值。
如需智慧型組態預設值,以及如何選擇最適合您應用程式的預設模式值的詳細資訊,請參閱 AWS SDK 與工具參考指南。
以下是四種方法來設置默認模式為您的應用程序。
如果您使用系統屬性、環境變數或組 AWS 態檔進行全域設定預設模式,您可以在建置 HTTP 用戶端時覆寫這些設定。
當您使用此httpClientBuilder()
方法建置 HTTP 用戶端時,設定只會套用至您正在建置的執行個體。這裡顯示了一個例子。在此範例中,以 NetTit 為connectTimeoutInMillis
基礎的 HTTP 用戶端會覆寫為和全域設定的任何預設模式值。tlsNegotiationTimeoutInMillis