HTTP 用戶端 - AWS SDK for Java 2.x

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

HTTP 用戶端

您可以變更用於服務用戶端的 HTTP 用戶端,以及使用 AWS SDK for Java 2.x. 本節討論了 SDK 的 HTTP 用戶端和設定。

適用於 Java 的開發套件中可用的 HTTP 用戶端

同步用戶端

SDK for Java 中的同步 HTTP 客戶端實現了該SdkHttpClient接口。同步服務用戶端 (例如S3Client或) 需要使用同步 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 用戶端會實作SdkAsyncHttpClient介面。非同步服務用戶端 (例如S3AsyncClient或) 需要使用非同步 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 用戶端建議的流程圖。

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 支援的服務用戶端,例如和 KinesisAsynClient TranscribeStreamingAsyncClient

1 由於其額外的好處,我們建議您盡可能使用 AWS 以 CRT 為基礎的 HTTP 用戶端。

智慧型組態預設

AWS SDK for Java 2.x (版本 2.17.102 或更新版本)提供智慧型組態預設功能。此功能會最佳化兩個 HTTP 用戶端屬性,以及不會影響 HTTP 用戶端的其他屬性。

智慧型組態預設值會根據您提供的預設模式值,為connectTimeoutInMillistlsNegotiationTimeoutInMillis屬性設定合理的值。您可以根據應用程式的特性來選擇預設模式值。

如需智慧型組態預設值,以及如何選擇最適合您應用程式的預設模式值的詳細資訊,請參閱 AWS SDK 與工具參考指南

以下是四種方法來設置默認模式為您的應用程序。

Service client

使用服務用戶端產生器直接在服務用戶端上設定預設模式。下列範例會將預設模式設定auto為的DynamoDbClient

DynamoDbClient ddbClient = DynamoDbClient.builder() .defaultsMode(DefaultsMode.AUTO) .build();
System property

您可以使用系aws.defaultsMode統屬性來指定預設模式。如果您在 Java 中設置系統屬性,則需要在初始化任何服務客戶端之前設置屬性。

下列範例說明如何將預設模式設定為auto使用 Java 中設定的系統屬性。

System.setProperty("aws.defaultsMode", "auto");

下面的例子演示了如何將默認模式設置為auto使用java命令的-D選項。

java -Daws.defaultsMode=auto
Environment variable

設定環境變數的值,AWS_DEFAULTS_MODE以選取應用程式的預設模式。

下列資訊顯示要執行的命令,將預設模式的值設定為auto使用環境變數。

作業系統 設定環境變數的指令

Linux、macOS 或 Unix

export AWS_DEFAULTS_MODE=auto

Windows

set AWS_DEFAULTS_MODE=auto
AWS config file

您可以將defaults_mode組態屬性新增至共用 AWS config檔案,如下列範例所示。

[default] defaults_mode = auto

如果您使用系統屬性、環境變數或組 AWS 態檔進行全域設定預設模式,您可以在建置 HTTP 用戶端時覆寫這些設定。

當您使用此httpClientBuilder()方法建置 HTTP 用戶端時,設定只會套用至您正在建置的執行個體。這顯示了一個例子。在此範例中,以 NetTit 為connectTimeoutInMillis基礎的 HTTP 用戶端會覆寫為和全域設定的任何預設模式值。tlsNegotiationTimeoutInMillis