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
设置以限制一次上传的文件块数 - 可能有一个最佳点,您仍然可以获得合理的吞吐量,但不会使网络过载。
我有下一个将文件上传到 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
设置以限制一次上传的文件块数 - 可能有一个最佳点,您仍然可以获得合理的吞吐量,但不会使网络过载。