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

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

HTTP 用戶端

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

HTTP 適用於 Java SDK 的 中可用的用戶端

同步用戶端

SDK 適用於 Java 的 中的同步HTTP用戶端實作 SdkHttpClient 介面。同步服務用戶端,例如 S3ClientDynamoDbClient,需要使用同步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用戶端會實作 SdkAsyncHttpClient 介面。非同步服務用戶端,例如 S3AsyncClientDynamoDbAsyncClient,需要使用非同步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用戶端的詳細資訊。

HTTP 用戶端 同步或非同步 使用情況 限制/撤回
Apache 型HTTP用戶端

(預設同步HTTP用戶端)

Sync 如果您偏好低延遲而非高輸送量,請使用它 與其他HTTP用戶端相比,啟動時間較慢
URLConnection型HTTP用戶端 Sync 如果您有限制第三方相依性的嚴格要求,請使用它 不支援 方法,其中一些 需要此HTTPPATCH方法,APIS例如 Amazon APIGateway Update 操作
AWS CRT型同步HTTP用戶端1 Sync

• 如果您的應用程式在 中執行,請使用它 AWS Lambda

• 如果您偏好高輸送量而非低延遲,請使用它

• 如果您偏好同步SDK用戶端,請使用它

不支援下列 Java 系統屬性:

  • javax.net.ssl。keyStore

  • javax.net.ssl。keyStorePassword

  • javax.net.ssl。trustStore

  • javax.net.ssl。trustStorePassword

Netty 型HTTP用戶端

(預設非同步HTTP用戶端)

非同步

• 如果您的應用程式叫用需要 HTTP/2 支援的 ,例如 KinesisAPIs,請使用它 API SubscribeToShard

與其他HTTP用戶端相比,啟動時間較慢
AWS CRT型非同步HTTP用戶端1 非同步

• 如果您的應用程式正在 中執行,請使用它 AWS Lambda

• 如果您偏好高輸送量而非低延遲,請使用它

• 如果您偏好非同步SDK用戶端,請使用它

• 不支援需要 HTTP/2 支援的服務用戶端,例如 KinesisAsynClientTranscribeStreamingAsyncClient

不支援下列 Java 系統屬性:

  • javax.net.ssl。keyStore

  • javax.net.ssl。keyStorePassword

  • javax.net.ssl。trustStore

  • javax.net.ssl。trustStorePassword

1由於其新增的好處,我們建議您盡可能使用 AWS CRT型HTTP用戶端。

智慧組態預設值

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

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

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

以下是設定應用程式預設模式的四種方法。

Service client

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

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

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

下列範例示範如何在 Java 中使用auto系統屬性集將預設模式設定為 。

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

下列範例示範如何使用 java命令auto-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用戶端時,設定僅適用於您正在建置的執行個體。此處顯示範例。此範例中的 Netty 型HTTP用戶端會覆寫 connectTimeoutInMillis和 全域設定的任何預設模式值tlsNegotiationTimeoutInMillis