Java.net.SocketException:从S3读取文件时重置连接
我试图从S3中读取一些文件,并对每个文件进行一些处理。我可以浏览一些文件,但在处理过程中,我在特定文件的同一行中不断获得Java.net.SocketException:Connection reset。不过,所讨论的文件应该是正常的,因为我可以使用相同的类和方法(conversionUtils.convert())在本地处理它 服务类别:Java.net.SocketException:从S3读取文件时重置连接,java,amazon-web-services,amazon-s3,Java,Amazon Web Services,Amazon S3,我试图从S3中读取一些文件,并对每个文件进行一些处理。我可以浏览一些文件,但在处理过程中,我在特定文件的同一行中不断获得Java.net.SocketException:Connection reset。不过,所讨论的文件应该是正常的,因为我可以使用相同的类和方法(conversionUtils.convert())在本地处理它 服务类别: public class FileService { @Inject private S3Utils s3utils; private Co
public class FileService {
@Inject
private S3Utils s3utils;
private ConversionUtils conversionUtils = new ConversionUtils();
public void processFile() {
List<S3ObjectSummary> files = s3utils.getAllFiles();
List<S3Object> unprocessedFiles = s3utils.getUnprocessedFiles(files);
for(S3Object file: unprocessedFiles) {
InputStream content = file.getObjectContent();
List<Record> records = conversionUtils.convert(content); //Exception thrown here
}
}
}
我读过其他一些有类似错误的线程,问题是AmazonS3客户端被垃圾收集,因此关闭了流,但我想知道这里是否是这样。关于这个问题有什么想法吗?谢谢。我通过设置ClientConfig使连接保持活动状态,克服了这个问题
AmazonS3ClientBuilder
.standard()
.withCredentials(
new DefaultAWSCredentialsProviderChain())
.withClientConfiguration(
new ClientConfiguration()
.withTcpKeepAlive(true))
.build();
我在aws sdk1.X中遇到了同样的问题 奇怪的是,当应用程序在服务器上运行时,它在本地机器上工作正常,连接重置 使用TcpKeepAlive(true)尝试了
,但结果相同
Java.net.SocketException:连接重置
变通办法
我尝试使用range(startPosition,endPosition)
,直到我读取了所有数据,它才起作用。在我将s3 proxy升级到1.6.0和aws-java-sdk-s3升级到1.1.285之后,连接重置问题得到了解决。我在从s3存储桶读取和处理大文件时遇到了同样的问题。这个解决方案对我也很有效。我希望在使用v2客户端时也能看到这个解决方案,但感谢您让我的解决方案走上正轨!对不起,我不再和AWS合作了。切换到Azure。祝你好运
@Configuration
public class Config {
@Bean
public AmazonS3 amazonS3() {
return AmazonS3ClientBuilder.standard().withCredentials(new DefaultAWSCredentialsProviderChain()).build();
}
}
AmazonS3ClientBuilder
.standard()
.withCredentials(
new DefaultAWSCredentialsProviderChain())
.withClientConfiguration(
new ClientConfiguration()
.withTcpKeepAlive(true))
.build();