設定 Apache 型HTTP用戶端 - AWS SDK for Java 2.x

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

設定 Apache 型HTTP用戶端

ApacheHttpClient 預設情況下, 中的同步服務用戶端 AWS SDK for Java 2.x 會使用 Apache 型HTTP用戶端。SDK的 ApacheHttpClient是以 Apache 為基礎HttpClient

SDK 也提供 UrlConnectionHttpClient,可更快載入,但功能較少。如需有關設定 的資訊UrlConnectionHttpClient,請參閱 設定 URLConnection型HTTP用戶端

若要查看適用於 的完整組態選項,ApacheHttpClient請參閱 ApacheHttpClient.BuilderProxyConfiguration.Builder

存取 ApacheHttpClient

在大多數情況下,您會在沒有任何明確組態ApacheHttpClient的情況下使用 。您宣告您的服務用戶端, SDK會為您ApacheHttpClient使用標準值來設定 。

如果您想要明確設定 ApacheHttpClient 或將其與多個服務用戶端搭配使用,則需要將其用於組態。

不需要組態

當您宣告對 Maven 中的服務用戶端具有相依性時, SDK會新增對apache-client成品的執行期相依性。這可讓 ApacheHttpClient類別在執行階段可供您的程式碼使用,但無法在編譯時間使用。如果您未設定 Apache 型HTTP用戶端,則不需要為其指定相依性。

在 Maven pom.xml 檔案的下列XML程式碼片段中,宣告為 的相依性<artifactId>s3</artifactId>會自動帶入 Apache 型HTTP用戶端。您不需要特別為其宣告相依性。

<dependencyManagement> <dependencies> <dependency> <groupId>software.amazon.awssdk</groupId> <artifactId>bom</artifactId> <version>2.27.21</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <dependencies> <!-- The s3 dependency automatically adds a runtime dependency on the ApacheHttpClient--> <dependency> <groupId>software.amazon.awssdk</groupId> <artifactId>s3</artifactId> </dependency> </dependencies>

透過這些相依性,您無法進行任何明確的HTTP組態變更,因為ApacheHttpClient程式庫僅位於執行期類別路徑上。

需要的配置

若要設定 ApacheHttpClient,您需要在編譯時新增對apache-client程式庫的相依性。

請參閱下列 Maven pom.xml 檔案的範例來設定 ApacheHttpClient

<dependencyManagement> <dependencies> <dependency> <groupId>software.amazon.awssdk</groupId> <artifactId>bom</artifactId> <version>2.27.21</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <dependencies> <dependency> <groupId>software.amazon.awssdk</groupId> <artifactId>s3</artifactId> </dependency> <!-- By adding the apache-client dependency, ApacheHttpClient will be added to the compile classpath so you can configure it. --> <dependency> <groupId>software.amazon.awssdk</groupId> <artifactId>apache-client</artifactId> </dependency> </dependencies>

使用和設定 ApacheHttpClient

您可以設定 執行個體,ApacheHttpClient以及建置服務用戶端,也可以設定單一執行個體在多個服務用戶端之間共用。

使用任一方法時,您可以使用 ApacheHttpClient.Builder來設定 Apache 型HTTP用戶端的屬性。

最佳實務:將ApacheHttpClient執行個體專用於服務用戶端

如果您需要設定 的執行個體ApacheHttpClient,建議您建置專用ApacheHttpClient執行個體。您可以使用服務用戶端建置器httpClientBuilder的方法來執行此操作。如此一來,HTTP用戶端的生命週期會由 管理SDK,如果ApacheHttpClient執行個體不再需要時未關閉,則有助於避免潛在的記憶體洩漏。

下列範例會建立 ,S3Client並使用 ApacheHttpClientmaxConnectionsconnectionTimeout值設定 的內嵌執行個體。HTTP 執行個體是使用 httpClientBuilder的方法建立。 S3Client.Builder

匯入

import software.amazon.awssdk.http.apache.ApacheHttpClient; import software.amazon.awssdk.services.s3.S3Client; import java.time.Duration;

Code

S3Client s3Client = S3Client // Singleton: Use the s3Client for all requests. .builder() .httpClientBuilder(ApacheHttpClient.builder() .maxConnections(100) .connectionTimeout(Duration.ofSeconds(5)) ).build(); // Perform work with the s3Client. s3Client.close(); // Requests completed: Close all service clients.

替代方法:共用ApacheHttpClient執行個體

為了協助降低應用程式的資源和記憶體用量,您可以設定 ,ApacheHttpClient並在多個服務用戶端之間共用。將共用HTTP連線集區,這會降低資源用量。

注意

共用ApacheHttpClient執行個體時,您必須在準備好進行處置時將其關閉。服務用戶端關閉時, SDK不會關閉執行個體。

下列範例會設定兩個服務HTTP用戶端所使用的 Apache 型用戶端。設定的ApacheHttpClient執行個體會傳遞至每個建置器httpClient的方法。當不再需要服務用戶端和HTTP用戶端時,程式碼會明確關閉它們。程式碼最後會關閉HTTP用戶端。

匯入

import software.amazon.awssdk.http.SdkHttpClient; import software.amazon.awssdk.http.apache.ApacheHttpClient; import software.amazon.awssdk.services.dynamodb.DynamoDbClient; import software.amazon.awssdk.services.s3.S3Client;

Code

SdkHttpClient apacheHttpClient = ApacheHttpClient.builder() .maxConnections(100).build(); // Singletons: Use the s3Client and dynamoDbClient for all requests. S3Client s3Client = S3Client.builder() .httpClient(apacheHttpClient).build(); DynamoDbClient dynamoDbClient = DynamoDbClient.builder() .httpClient(apacheHttpClient).build(); // Perform work with the s3Client and dynamoDbClient. // Requests completed: Close all service clients. s3Client.close(); dynamoDbClient.close(); apacheHttpClient.close(); // Explicitly close apacheHttpClient.

Proxy 組態範例

下列程式碼片段使用 Apache HTTP用戶端 的代理組態建置器

SdkHttpClient apacheHttpClient = ApacheHttpClient.builder() .proxyConfiguration(ProxyConfiguration.builder() .endpoint(URI.create("http://example.com:1234")) .username("username") .password("password") .addNonProxyHost("localhost") .addNonProxyHost("host.example.com") .build()) .build();

代理組態的同等 Java 系統屬性會顯示在下列命令列程式碼片段中。

$ java -Dhttp.proxyHost=example.com -Dhttp.proxyPort=1234 -Dhttp.proxyUser=username \ -Dhttp.proxyPassword=password -Dhttp.nonProxyHosts=localhost|host.example.com -cp ... App

使用環境變數的等效設定為:

// Set the following environment variables. // $ export HTTP_PROXY="http://username:password@example.com:1234" // $ export NO_PROXY="localhost|host.example.com" // Set the 'useSystemPropertyValues' to false on the proxy configuration. SdkHttpClient apacheHttpClient = ApacheHttpClient.builder() .proxyConfiguration(ProxyConfiguration.builder() .useSystemPropertyValues(Boolean.FALSE) .build()) .build(); // Run the application. // $ java -cp ... App
注意

Apache HTTP用戶端目前不支援HTTPS代理系統屬性或 HTTPS_PROXY 環境變數。