首页 文章

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

提问于
浏览
5

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

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

Jul 31,2014 4:39:38 AM com.amazonaws.http.AmazonHttpClient executeHelper INFO:无法执行HTTP请求:连接重置java.net.SocketException:java.net.SocketInputStream.read中的连接重置(SocketInputStream.java: 189)at sun.security.ssl.InputRecord.readFully(InputRecord.java:312)at sun.security.ssl.InputRecord.read(InputRecord.java:350)at java.net.SocketInputStream.read(SocketInputStream.java:121) )sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:927)at sun.security.ssl.SSLSocketImpl.readDataRecord(SSLSocketImpl.java:884)at sun.security.ssl.AppInputStream.read(AppInputStream.java: 102)org.apache.http.impl.io.AbstractSessionInputBuffer.fillBuffer(AbstractSessionInputBuffer.java:166)org.apache.http.impl.io.SocketInputBuffer.fillBuffer(SocketInputBuffer.java:90)at org.apache.http .impl.io.AbstractSessionInputBuffer.readLine(AbstractSessionInputBuffer.java:281)at org.apache.http.impl.conn.DefaultHttpResponseParser.parseHead(DefaultHttpResponseP) arser.java:92)org.apache.http.impl.conn.DefaultHttpResponseParser.parseHead(DefaultHttpResponseParser.java:62)org.apache.http.impl.io.AbstractMessageParser.parse(AbstractMessageParser.java:254)at org .apache.http.impl.AbstractHttpClientConnection.receiveResponseHeader(AbstractHttpClientConnection.java:289)org.apache.http.impl.conn.DefaultClientConnection.receiveResponseHeader(DefaultClientConnection.java:252)at org.apache.http.impl.conn.ManagedClientConnectionImpl .receiveResponseHeader(ManagedClientConnectionImpl.java:191)org.apache.http.protocol.HttpRequestExecutor.doReceiveResponse(HttpRequestExecutor.java:300)at org . 在com.amazonaws.http.protocol.SdkHttpRequestExecutor.doReceiveResponse(SdkHttpRequestExecutor.java:66) . apache.http.protocol.HttpRequestExecutor.execute(HttpRequestExecutor.java:127)位于org.apache.http.impl.client.DefaultRequestDirector的org.apache.http.impl.client.DefaultRequestDirector.tryExecute(DefaultRequestDirector.java:717) . 执行(DefaultReque stDirector.java:522)atg.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:906)at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:805)at com .amazonaws.http.AmazonHttpClient.executeHelper(AmazonHttpClient.java:402)at com.amazonaws.http.AmazonHttpClient.execute(AmazonHttpClient.java:245)at com.amazonaws.services.s3.AmazonS3Client.invoke(AmazonS3Client.java:3711) )在 Cloud 上的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请求)
抛出AmazonClientException,
AmazonServiceException
...
抛出:
AmazonClientException - 如果在发出请求或处理响应时客户端遇到任何错误 .
AmazonServiceException - 如果在处理请求时Amazon S3中发生任何错误 .
...
</文档>

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

我有以下问题

  • 这是预期的行为,如果不是我如何解决此问题?

  • 为什么我的try catch块无法捕获此异常?

  • 对于AmazonClient或AmazonServiceException,是否建议我们再次重试上传,还是应将其视为不可恢复的错误?

2 回答

  • 1

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

  • 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 ...

    Errors I faced : 1)我收到一个错误窗口,其中显示消息“无法将项目上传到Lambda无法执行HTTP请求:通过对等方重置连接:套接字写入错误”

    2)我的Stack Tarce的第一行异常是:“com.amazonaws.SdkClientException:无法执行HTTP请求:连接由peer重置:套接字写入错误引起:java.net.SocketException:连接由peer重置:socket write错误”

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

    然后我通过在我的eclipse网络连接中做一个小改动来改变设置,因为我的代理设置阻止将我的项目上传到lambda,我提出了如下解决方案:

    Solution : Window -> Preferences -> General -> Network Connection -> Active Provider as "Direct".

    然后尝试使用相同的步骤在lambda上传项目,它对我有用 . 希望这也会对你有所帮助 .

相关问题