本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
使用 AWS CRT基于高性能 S3 客户端:的 S3 客户端
AWS CRT基于的 S3 客户端(建立在AWS 公共运行时 (CRT) 之上)是替代的 S3 异步客户端。它通过自动使用 Amazon S3 的分段API上传和字节范围提取功能,在亚马逊简单存储服务 (Amazon S3) Simple Ser vice (Amazon S3) 之间传输对象,从而提高了性能和可靠性。
AWS CRT基于的 S3 客户端可提高网络故障时的传输可靠性。通过重试文件传输中失败的各个分段,而无需从头开始重新启动传输,从而提高可靠性。
此外, AWS CRT基于的 S3 客户端还提供了增强的连接池和域名系统 (DNS) 负载平衡,这也提高了吞吐量。
您可以使用 AWS CRT基于的 S3 客户端代替SDK的标准 S3 异步客户端,并立即利用其提高的吞吐量。
AWS CRT中基于的组件 SDK
本主题中介绍 AWS CRT的基于 S3 的客户端和 AWS CRT基于的HTTP客户端是中的不同组件SDK。
AWS CRT基于的 S3 客户端是 S 3 AsyncClientS3AsyncClient
接口实现的替代方案,具有多种优势。
AWS CRT基于的HTTP客户端是SdkAsyncHttpClientSdkAsyncHttpClient
接口实现的替代方案,具有多种优势。
尽管两个组件都使用AWS 公共运行时中的库,但 AWS CRT基于的 S3 客户端使用 aws-c-s3 库
添加依赖项以使用 AWS CRT基于的 S3 客户端
要使用 AWS CRT基于的 S3 客户端,请将以下两个依赖项添加到您的 Maven 项目文件中。示例显示了要使用的最低版本。在 Maven Central 存储库中搜索 s3
<dependency> <groupId>software.amazon.awssdk</groupId> <artifactId>s3</artifactId> <version>
2.27.21
</version> </dependency> <dependency> <groupId>software.amazon.awssdk.crt</groupId> <artifactId>aws-crt</artifactId> <version>0.30.11
</version> </dependency>
创建 AWS CRT基于的 S3 客户端的实例
使用默认设置创建 AWS CRT基于 S3 客户端的实例,如以下代码片段所示。
S3AsyncClient s3AsyncClient = S3AsyncClient.crtCreate();
要配置客户端,请使用 AWS CRT客户端生成器。您可以通过更改构建器方法从标准 S3 异步客户端切换到 AWS CRT基于标准的 S3 异步客户端。
import software.amazon.awssdk.auth.credentials.DefaultCredentialsProvider; import software.amazon.awssdk.regions.Region; import software.amazon.awssdk.services.s3.S3AsyncClient; S3AsyncClient s3AsyncClient = S3AsyncClient.crtBuilder() .credentialsProvider(DefaultCredentialsProvider.create()) .region(Region.US_WEST_2) .targetThroughputInGbps(20.0) .minimumPartSizeInBytes(8 * 1025 * 1024L) .build();
注意
AWS CRT客户端生成器目前可能不支持标准生成器中的某些设置。通过调用 S3AsyncClient#builder()
获取标准生成器。
使用 AWS CRT基于的 S3 客户端
使用 AWS CRT基于的 S3 客户端调用 Amazon S3 API 操作。以下示例演示了可通过提供的PutObject
import software.amazon.awssdk.core.async.AsyncRequestBody; import software.amazon.awssdk.core.async.AsyncResponseTransformer; import software.amazon.awssdk.services.s3.S3AsyncClient; import software.amazon.awssdk.services.s3.model.GetObjectResponse; import software.amazon.awssdk.services.s3.model.PutObjectResponse; S3AsyncClient s3Client = S3AsyncClient.crtCreate(); // Upload a local file to Amazon S3. PutObjectResponse putObjectResponse = s3Client.putObject(req -> req.bucket(
<BUCKET_NAME>
) .key(<KEY_NAME>
), AsyncRequestBody.fromFile(Paths.get(<FILE_NAME>
))) .join(); // Download an object from Amazon S3 to a local file. GetObjectResponse getObjectResponse = s3Client.getObject(req -> req.bucket(<BUCKET_NAME>
) .key(<KEY_NAME>
), AsyncResponseTransformer.toFile(Paths.get(<FILE_NAME>
))) .join();
配置限制
AWS CRT基于 S3 客户端和基于 Java 的 S3 异步客户端提供了类似的功能,而 AWS CRT基于的 S3 客户端则提供了性能优势。但是, AWS CRT基于的 S3 客户端缺少基于 Java 的 S3 异步客户端所具有的配置设置。这些设置包括:
-
客户端级配置:API调用尝试超时、压缩执行拦截器、指标发布器、自定义执行属性、自定义高级选项、自定义计划执行器服务、自定义标头
-
请求级别配置:自定义签名者、凭证提供者、API呼叫尝试超时
有关配置差异的完整列表,请参阅API参考资料。
基于 Java 的 S3 异步客户端 | AWS CRT基于 S3 客户端 |
---|---|
客户端级配置 请求级配置 |
客户端级配置 没有请求级别的配置 |