Amazon S3 上传 NoHttpResponseException

Amazon S3 Upload NoHttpResponseException

我有下一个将文件上传到 Amazon S3 的代码:

AmazonS3Client client = new AmazonS3Client(credentials, 
            new ClientConfiguration().withMaxConnections(100)
                                  .withConnectionTimeout(120 * 1000)
                                  .withMaxErrorRetry(15));
TransferManager tm = new TransferManager(client);
TransferManagerConfiguration configuration = new TransferManagerConfiguration();
configuration.setMultipartUploadThreshold(MULTIPART_THRESHOLD);
tm.setConfiguration(configuration);

Upload upload = tm.upload(bucket, key, file);

try {
    upload.waitForCompletion();
} catch(InterruptedException ex) {
    logger.error(ex.getMessage());
} finally {
    tm.shutdownNow(false);
}

有效,但一些上传 (1GB) 会产生下一条日志消息:

 INFO AmazonHttpClient:Unable to execute HTTP request: bucket-name.s3.amazonaws.com failed to respond
 org.apache.http.NoHttpResponseException: bucket-name.s3.amazonaws.com failed to respond

我曾尝试在没有 AmazonS3Client 的情况下创建 TransferManager,但没有帮助。

有什么办法可以解决吗?

日志消息告诉您在向 S3 发送数据时出现暂时性错误。您已配置 .withMaxErrorRetry(15),因此 AmazonS3Client 正在透明地重试失败的请求并且整体上传成功。

这里不一定有任何需要解决的问题 - 有时数据包会在网络上丢失,尤其是当您试图一次推送大量数据包时。稍等片刻然后重试通常是处理此问题的正确方法,而这正是已经发生的事情。

如果需要,您可以尝试调低 MaxConnections 设置以限制一次上传的文件块数 - 可能有一个最佳点,您仍然可以获得合理的吞吐量,但不会使网络过载。