如何通过AmazonS3EncryptionClientBuilder配置重试策略?
刚好之前碰到过这个困惑,其实答案藏在继承关系里——AmazonS3EncryptionClientBuilder继承自S3ClientBuilder,而S3ClientBuilder提供了设置ClientConfiguration的方法,只是加密客户端的Builder文档没特意强调这一点而已。
具体实现步骤:
先配置带重试策略的ClientConfiguration
你可以像之前手动构造客户端时一样,创建ClientConfiguration实例并设置重试相关参数,比如重试次数、重试条件、退避策略等:import com.amazonaws.ClientConfiguration; import com.amazonaws.retry.PredefinedRetryPolicies; import com.amazonaws.retry.RetryPolicy; ClientConfiguration clientConfig = new ClientConfiguration() // 设置最大重试次数 .withMaxErrorRetry(5) // 自定义重试策略(可选,也可以直接使用默认策略) .withRetryPolicy(new RetryPolicy( PredefinedRetryPolicies.DEFAULT_RETRY_CONDITION, PredefinedRetryPolicies.DEFAULT_BACKOFF_STRATEGY, 5, true ));通过EncryptionClientBuilder注入配置
利用AmazonS3EncryptionClientBuilder.standard()获取Builder实例后,调用withClientConfiguration()方法传入上面的配置,再补充加密相关的参数(比如加密材料、区域等),最后构建客户端:import com.amazonaws.services.s3.AmazonS3EncryptionClient; import com.amazonaws.services.s3.AmazonS3EncryptionClientBuilder; import com.amazonaws.services.s3.model.EncryptionMaterials; import com.amazonaws.services.s3.model.StaticEncryptionMaterialsProvider; import com.amazonaws.regions.Regions; // 替换成你的实际加密密钥材料 EncryptionMaterials encryptionMaterials = new EncryptionMaterials(yourEncryptionKey); AmazonS3EncryptionClient encryptionClient = AmazonS3EncryptionClientBuilder.standard() .withClientConfiguration(clientConfig) .withEncryptionMaterials(new StaticEncryptionMaterialsProvider(encryptionMaterials)) .withRegion(Regions.US_EAST_1) .build();
为什么这个方法有效?
因为AmazonS3EncryptionClientBuilder的父类链是:AmazonS3EncryptionClientBuilder → AbstractAmazonS3Builder → S3ClientBuilder,而S3ClientBuilder中定义了withClientConfiguration(ClientConfiguration)和setClientConfiguration(ClientConfiguration)方法,这些方法完全适用于加密客户端的构建。
这样就能同时实现客户端加密和自定义重试策略的需求啦!
内容的提问来源于stack exchange,提问作者Dhairya Seth

