本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
配置基于 Apache 5.x 的 HTTP 客户端
该软件开发工具包基Apache5HttpClient于 Apache HttpClient 5.x
访问 Apache5HttpClient
在大多数情况下,您无需进行任何显式配置即可使用 Apache5HttpClient。您只需声明您的服务客户端,SDK 将使用标准值为您配置 Apache5HttpClient。
如果要显式配置 Apache5HttpClient 或将其用于多个服务客户端,则需要将其设置为可供配置。
无需配置
当您在 Maven 中声明对服务客户端的依赖项时,SDK 会添加对 apache5-client 构件的运行时系统依赖项。这使得 Apache5HttpClient 类在运行时可供您的代码使用,但在编译时不可用。如果您没有配置 Apache-based HTTP 客户端,则无需为其指定依赖关系。
在以下 Maven pom.xml 文件的 XML 片段中,使用声明的依赖关系<artifactId>s3</artifactId>会自动引入 Apache-based HTTP 客户端。您无需专门为其声明依赖项。
<dependencyManagement> <dependencies> <dependency> <groupId>software.amazon.awssdk</groupId> <artifactId>bom</artifactId> <version>2.54.0*</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <dependencies> <!-- The s3 dependency automatically adds a runtime dependency on the Apache5HttpClient--> <dependency> <groupId>software.amazon.awssdk</groupId> <artifactId>s3</artifactId> </dependency> </dependencies>
*将以红色显示的版本替换为您要使用的 Java SDK 版本。在 Maven Central
有了这些依赖项,您无法进行任何显式 HTTP 配置更改,因为 Apache5HttpClient 库仅位于运行时系统类路径上。
需要配置
要配置 Apache5HttpClient,您需要在编译 时添加对 apache5-client 库的依赖项。
请参阅以下 Maven pom.xml 文件示例来配置 Apache5HttpClient。
<dependencyManagement> <dependencies> <dependency> <groupId>software.amazon.awssdk</groupId> <artifactId>bom</artifactId> <version>2.54.0*</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <dependencies> <dependency> <groupId>software.amazon.awssdk</groupId> <artifactId>s3</artifactId> </dependency> <!-- By adding the apache5-client dependency, Apache5HttpClient will be added to the compile classpath so you can configure it. --> <dependency> <groupId>software.amazon.awssdk</groupId> <artifactId>apache5-client</artifactId> </dependency> </dependencies>
*将以红色显示的版本替换为您要使用的 Java SDK 版本。在 Maven Central
使用和配置 Apache5HttpClient
您可以在生成服务客户端的同时配置一个 Apache5HttpClient 实例,也可以将单个实例配置为在多个服务客户端之间共享。
无论采用哪种方法,您都可以使用Apache5HttpClient.Builder
最佳实践:将一个 Apache5HttpClient 实例专用于服务客户端
如果您需要配置 Apache5HttpClient 实例,建议您生成专用 Apache5HttpClient 实例。你可以使用服务客户端生成器的 http ClientBuilder 方法来实现。这样,HTTP 客户端的生命周期就由 SDK 管理,这有助于避免在不再需要 Apache5HttpClient 实例却不关闭实例时可能发生的内存泄漏。
以下示例创建 S3Client 并使用 maxConnections 和 ConnectionTimeout 值配置Apache5HttpClient的嵌入式实例。HTTP 实例是使用 S3Client.Builder 的 httpClientBuilder 方法创建的。
导入
import software.amazon.awssdk.http.apache5.Apache5HttpClient; import software.amazon.awssdk.services.s3.S3Client; import java.time.Duration;
代码
S3Client s3Client = S3Client // Singleton: Use the s3Client for all requests. .builder() .httpClientBuilder(Apache5HttpClient.builder() .maxConnections(100) .connectionTimeout(Duration.ofSeconds(5)) ) .build(); // Perform work with the s3Client. s3Client.close(); // Requests completed: Close all service clients.
替代方法:共享 Apache5HttpClient 实例
为了帮助降低应用程序的资源和内存使用量,您可以配置 Apache5HttpClient 并在多个服务客户端之间共享该客户端。将共享 HTTP 连接池,从而降低资源使用量。
注意
共享 Apache5HttpClient 实例时,必须在准备好弃置实例时将其关闭。服务客户端关闭后,SDK 不会关闭实例。
以下示例配置了由两个服务客户端使用的 Apache-based HTTP 客户端。配置的Apache5HttpClient实例将传递给每个生成器的 HttpClient 方法。当不再需要服务客户端和 HTTP 客户端时,代码会显式关闭它们。代码最后关闭 HTTP 客户端。
导入
import software.amazon.awssdk.http.SdkHttpClient; import software.amazon.awssdk.http.apache5.Apache5HttpClient; import software.amazon.awssdk.services.dynamodb.DynamoDbClient; import software.amazon.awssdk.services.s3.S3Client;
代码
SdkHttpClient apache5HttpClient = Apache5HttpClient.builder() .maxConnections(100).build(); // Singletons: Use the s3Client and dynamoDbClient for all requests. S3Client s3Client = S3Client.builder() .httpClient(apache5HttpClient).build(); DynamoDbClient dynamoDbClient = DynamoDbClient.builder() .httpClient(apache5HttpClient).build(); // Perform work with the s3Client and dynamoDbClient. // Requests completed: Close all service clients. s3Client.close(); dynamoDbClient.close(); apache5HttpClient.close(); // Explicitly close apache5HttpClient.