

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 配置基于 Apache 5.x 的 HTTP 客户端
<a name="http-configuration-apache5"></a>

## 访问 Apache5 HttpClient
<a name="http-apache-5-dependency"></a>

要使用，`Apache5HttpClient`您必须添加对服务客户端的依赖关系**apache5-client**并在服务客户端`Apache5HttpClient`上进行显式配置。

```
<dependencyManagement>
   <dependencies>
        <dependency>
            <groupId>software.amazon.awssdk</groupId>
            <artifactId>bom</artifactId>
            <version>2.41.0*</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

<dependencies>
    <dependency>
        <groupId>software.amazon.awssdk</groupId>
        <artifactId>s3</artifactId>
    </dependency>
    
    <dependency>
        <groupId>software.amazon.awssdk</groupId>
        <artifactId>apache5-client</artifactId>
    </dependency>
</dependencies>
```

\$1将以红色显示的版本替换为您要使用的 Java SDK 版本。在 [Maven Central](https://central.sonatype.com/artifact/software.amazon.awssdk/bom) 上查找最新版本。

### 使用和配置 `Apache5HttpClient`
<a name="http-config-apache-5-config"></a>

您可以在生成服务客户端的同时配置一个 `Apache5HttpClient` 实例，也可以将单个实例配置为在多个服务客户端之间共享。

无论哪种方法，您都可以使用 [Apache5. HttpClient Builder 为基于 Apache 5](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/http/apache5/Apache5HttpClient.Builder.html) 的 HTTP 客户端配置属性。

#### 最佳实践：将 Apache5 HttpClient 实例专用于服务客户端
<a name="http-apache5-dedicated-instance"></a>

如果您需要配置 `Apache5HttpClient` 实例，建议您生成专用 `Apache5HttpClient` 实例。您可以使用服务客户端生成器的 httpClientBuilder 方法来执行此操作。这样，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` 实例
<a name="http-apache5-shared-instance"></a>

为了帮助降低应用程序的资源和内存使用量，您可以配置 `Apache5HttpClient` 并在多个服务客户端之间共享该客户端。将共享 HTTP 连接池，从而降低资源使用量。

**注意**  
共享 `Apache5HttpClient` 实例时，必须在准备好弃置实例时将其关闭。服务客户端关闭后，SDK 不会关闭实例。

以下示例配置了一个基于 Apache 的 HTTP 客户端，该客户端由两个服务客户端使用。配置的`ApacheHttpClient`实例将传递给每个生成器的 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.
```