uploadPart失败,无法执行HTTP请求:连接重置

时间:2014-08-14 10:46:29

标签: java amazon-web-services amazon-s3

我正在尝试使用分段上传AWS S3 java API执行文件上传(我使用的是SDK 1.8.1)。 我能够成功执行上传。

但是,间歇性地我不断得到这个例外。

  

2014年7月31日上午4:39:38 com.amazonaws.http.AmazonHttpClient   executeHelper INFO:无法执行HTTP请求:连接重置   java.net.SocketException:连接重置为   java.net.SocketInputStream.read(SocketInputStream.java:189)at   java.net.SocketInputStream.read(SocketInputStream.java:121)at   sun.security.ssl.InputRecord.readFully(InputRecord.java:312)at at   sun.security.ssl.InputRecord.read(InputRecord.java:350)at   sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:927)at at   sun.security.ssl.SSLSocketImpl.readDataRecord(SSLSocketImpl.java:884)   在sun.security.ssl.AppInputStream.read(AppInputStream.java:102)at   org.apache.http.impl.io.AbstractSessionInputBuffer.fillBuffer(AbstractSessionInputBuffer.java:166)   在   org.apache.http.impl.io.SocketInputBuffer.fillBuffer(SocketInputBuffer.java:90)   在   org.apache.http.impl.io.AbstractSessionInputBuffer.readLine(AbstractSessionInputBuffer.java:281)   在   org.apache.http.impl.conn.DefaultHttpResponseParser.parseHead(DefaultHttpResponseParser.java:92)   在   org.apache.http.impl.conn.DefaultHttpResponseParser.parseHead(DefaultHttpResponseParser.java:62)   在   org.apache.http.impl.io.AbstractMessageParser.parse(AbstractMessageParser.java:254)   在   org.apache.http.impl.AbstractHttpClientConnection.receiveResponseHeader(AbstractHttpClientConnection.java:289)   在   org.apache.http.impl.conn.DefaultClientConnection.receiveResponseHeader(DefaultClientConnection.java:252)   在   org.apache.http.impl.conn.ManagedClientConnectionImpl.receiveResponseHeader(ManagedClientConnectionImpl.java:191)   在   org.apache.http.protocol.HttpRequestExecutor.doReceiveResponse(HttpRequestExecutor.java:300)   在   com.amazonaws.http.protocol.SdkHttpRequestExecutor.doReceiveResponse(SdkHttpRequestExecutor.java:66)   在   org.apache.http.protocol.HttpRequestExecutor.execute(HttpRequestExecutor.java:127)   在   org.apache.http.impl.client.DefaultRequestDirector.tryExecute(DefaultRequestDirector.java:717)   在   org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:522)   在   org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:906)   在   org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:805)   在   com.amazonaws.http.AmazonHttpClient.executeHelper(AmazonHttpClient.java:402)   在   com.amazonaws.http.AmazonHttpClient.execute(AmazonHttpClient.java:245)   在   com.amazonaws.services.s3.AmazonS3Client.invoke(AmazonS3Client.java:3711)   在   com.amazonaws.services.s3.AmazonS3Client.uploadPart(AmazonS3Client.java:2809)   在云。< -filename-> .writeContent(< -filename-> .java:< -linenumber->)

在以下代码中

try {
                  _partETags.add(_s3.uploadPart(uploadPartReq).getPartETag());
      } catch (AmazonClientException e) {
                  System.out.println("Amazon service error. Retrying...");
                  printException(e);
      } catch (Exception e) {
                  printException(e);
                  throw new UserException("Received an exception while performing upload part");
      }

如果我查看docuementation,它说uploadPart函数只会抛出两个类AmazonClientException和AmazonServiceException。

链接:http://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/s3/AmazonS3.html#uploadPart(com.amazonaws.services.s3.model.UploadPartRequest)

<documentation>
...
UploadPartResult uploadPart(UploadPartRequest request)
throws AmazonClientException,
AmazonServiceException
...
Throws:
AmazonClientException - If any errors are encountered in the client while making the request or handling the response.
AmazonServiceException - If any errors occurred in Amazon S3 while processing the request. 
...
</documentation>

但是,我收到了不同的例外。

我有以下问题

  • 这是预期的行为,如果不是我如何解决此问题?
  • 为什么我的try catch阻止无法捕获此异常?
  • 对于AmazonClient或AmazonServiceException,是否建议我们 再次重试上传或应将其视为 不可恢复的错误?

2 个答案:

答案 0 :(得分:1)

这是来自AmazonS3Client的日志消息(在INFO级别),告诉您存在瞬态网络错误。默认情况下,AmazonS3Client会捕获这些类型的异常并为您重试上载。您可以通过ClientConfiguration调整此行为。如果在配置的重试次数之后上传仍未成功,则将根据文档引发AmazonClientException

答案 1 :(得分:0)

当我尝试通过eclipse上传我的项目AWS lambda时,我遵循了教程链接中的步骤:

  
    
      

https://examples.javacodegeeks.com/software-development/amazon-aws/tutorial-use-aws-lambda-s3-real-time-data-processing/

    
  

但是在执行步骤“将Lambda代码部署到AWS”时===> 在Eclipse中,右键单击您的代码,然后选择Amazon Web Services>将功能上传到Lambda…

我遇到的错误: 1)我收到一个错误窗口,并显示消息“ 无法将项目上传到Lambda无法执行HTTP请求:对等方重置连接:套接字写入错误

2)我的堆栈停放的第一行是一个例外: “ com.amazonaws.SdkClientException:无法执行HTTP请求:对等方重置连接:套接字写入错误 由以下原因引起:java.net.SocketException:对等方重置连接:套接字写入错误

3)Eclipse错误日志给出消息:“ org.eclipse.core.databinding.ValueBinding.doUpdate(ValueBinding.java:158)处的java.lang.NullPointerException”

然后我通过在Eclipse网络连接上进行一些小的更改来更改设置,因为我的代理设置阻止将我的项目上传到lambda,所以我提出了以下解决方案:

解决方案: 窗口->首选项->常规->网络连接->活动提供程序为“直接”。

,然后尝试使用相同的步骤将项目上传到lambda上,它对我有用。 希望这对您也有帮助。