AWS SDK V2中setSdkClientExecutionTimeout的等效配置是什么?
AWS Java SDK V2 单请求执行超时配置替代方案
你提到的V1版本中AmazonWebServiceRequest.setSdkClientExecutionTimeout()对应的单请求全局执行超时功能,在V2中并未被官方移除,只是调整了配置入口,同步、异步客户端的等效配置方式如下:
同步客户端配置
同步场景下可以在构建单个请求时通过.overrideConfiguration()方法传入超时配置,其中 apiCallTimeout 就是和V1sdkClientExecutionTimeout逻辑完全一致的参数,会限制整个请求从发起到完成的总时长(包含所有重试、退避等待的时间):
// 单请求自定义总执行超时示例(同步客户端) S3Client s3Client = S3Client.create(); GetObjectRequest getObjectRequest = GetObjectRequest.builder() .bucket("存储桶名称") .key("对象Key") .overrideConfiguration(config -> config // 总执行超时,等效V1的setSdkClientExecutionTimeout .apiCallTimeout(Duration.ofSeconds(30)) // 可选:单次HTTP调用超时,对应V1的setSdkRequestTimeout .apiCallAttemptTimeout(Duration.ofSeconds(10)) ) .build(); s3Client.getObject(getObjectRequest);
异步客户端配置
异步客户端除了同样支持上述请求级overrideConfiguration配置apiCallTimeout的方式之外,也可以在调用异步方法返回的CompletableFuture上自行设置超时作为兜底,两种方式可搭配使用:
// 异步客户端单请求超时配置示例 S3AsyncClient s3AsyncClient = S3AsyncClient.create(); GetObjectRequest getObjectRequest = GetObjectRequest.builder() .bucket("存储桶名称") .key("对象Key") .overrideConfiguration(config -> config.apiCallTimeout(Duration.ofSeconds(30))) .build(); // 额外通过Future自带超时机制兜底 s3AsyncClient.getObject(getObjectRequest, AsyncResponseTransformer.toBytes()) .orTimeout(30, TimeUnit.SECONDS) .whenComplete((resp, err) -> { // 业务侧处理响应或异常 });
如果你需要给客户端所有请求设置全局默认超时,也可以直接在构建客户端实例时配置overrideConfiguration参数,无需每个请求单独设置。
内容的提问来源于stack exchange,提问作者user2185573
相关产品推荐
相关产品推荐

