AWS Android SDK连接超时和重试

时间:2017-07-10 12:39:03

标签: android amazon-web-services amazon-s3 android-external-storage

我一直在使用AWS android sdk来处理我的android应用程序中的S3上的文件。用户面临一些问题,其中很少与连接超时有关。在我的应用程序中设置AmazonS3客户端时,我使用以下代码设置了超时和重试次数:

ClientConfiguration clientConfiguration = new ClientConfiguration();
clientConfiguration.setMaxErrorRetry(4);
clientConfiguration.setConnectionTimeout(10000); // default is 10 secs
clientConfiguration.setSocketTimeout(15000); // default is 50 secs

我读过的每个地方都说maxErrorRetry只会重试failed retryable requests。与连接超时和套接字连接超时相关的错误是否属于此类别?如果没有,这个案例的解决方案是什么?我一直在寻找这个问题很长一段时间,但没有得到任何明确的答案。

另外,我在TransferListener回调中遇到了两个特定的异常。有:

  1. 无法将对象内容存储到磁盘:读取超时(面临任何AWS例外的所有用户的14%面临此异常)
  2. 无法将对象内容存储到磁盘:超时(面临任何AWS异常的所有用户中有17.4%面临此异常)
  3. 以上两点对我们来说是最痛苦的。我一直认为这些是因为用户设备上没有剩余存储空间。我一直在使用外部存储中的应用程序特定目录来存储文件,现在正考虑将这些文件移动到缓存中,以便系统在设备上没有剩余空间时处理文件清理。假设用户设备上的问题空间不足,您认为这是一个很好的解决方案吗? 还有哪些其他可能性,因为上述存储相关的例外可能会发生?

1 个答案:

答案 0 :(得分:1)

此错误发生在SDK中的三个位置,其中两个位置很重要且适用于此处。

(1)https://github.com/aws/aws-sdk-android/blob/0958a37b4757c41cac40597b973ff417e0b758c4/aws-android-sdk-s3/src/main/java/com/amazonaws/services/s3/internal/ServiceUtils.java#L284

(2)https://github.com/aws/aws-sdk-android/blob/3983fda8c2d8703399ac4e9bf6ec0464d000a5af/aws-android-sdk-s3/src/main/java/com/amazonaws/mobileconnectors/s3/transferutility/DownloadTask.java#L161

我怀疑它是在(2)中,在您的情况下抛出异常。这可能由于多种原因而发生,而不可用的存储只是其中之一。

(1)S3对象不存在或S3存储桶/对象没有所需的权限。如果您具有用户访问内容所需的权限,请检查AWS S3控制台。 (2)下载过程中可能会出现网络中断。检查整个转移过程中是否有正确的网络

检查AWS CloudWatch日志以查看日志中是否有任何失败。

相关问题