我正在尝试从S3中读取一些文件,并对每个文件进行一些处理。我可以浏览一些文件,但是在处理过程中,我会在特定文件的同一行中不断获取 Java.net.SocketException:连接重置。有问题的文件应该可以,因为我可以使用相同的类和方法(conversionUtils.convert())在本地对其进行处理。
服务类别:
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
}
}
}
S3Utils类:
@Component
public class S3utils {
@Inject AmazonS3 amazonS3;
public List<S3ObjectSummary> getAllFiles() {
ListObjectsV2Request request = new ListObjectsV2Request().withBucketName('something').withPrefix('some_prefix');
ListObjectsV2Result result = amazonS3.listObjectsV2(request);;
return result.getObjectSummaries();
}
public List<S3Object> getUnprocessedFiles(List<S3ObjectSummary> files) {
//do some filtering here
List<S3Object> unprocessedFiles = new ArrayList<>();
for (S3ObjectSummary summary : filteredSummaries) {
S3Object s3Object = amazonS3.getObject(new GetObjectRequest(summary.getBucketName(), summary.getKey()));
unprocessedFiles.add(S3Object);
}
return unprocessedFiles;
}
}
配置类:
@Configuration
public class Config {
@Bean
public AmazonS3 amazonS3() {
return AmazonS3ClientBuilder.standard().withCredentials(new DefaultAWSCredentialsProviderChain()).build();
}
}
我已经阅读了其他一些具有类似错误的线程,其中的问题是正在对AmazonS3客户端进行垃圾收集,因此关闭了流,但是我想知道是否是这种情况。关于这个问题有什么想法吗?谢谢。
答案 0 :(得分:0)
我能够通过设置ClientConfig保持连接活跃来克服这一点
AmazonS3ClientBuilder
.standard()
.withCredentials(
new DefaultAWSCredentialsProviderChain())
.withClientConfiguration(
new ClientConfiguration()
.withTcpKeepAlive(true))
.build();
答案 1 :(得分:0)
我遇到了与aws sdk 1.X 相同的问题。
奇怪的是,它在本地计算机上运行良好,并且在应用程序在服务器上运行时重置了连接。
尝试过withTcpKeepAlive(true)
,但结果相同,即
Java.net.SocketException:连接重置
我尝试了withRange(startPosition,endPosition)
直到读取了所有数据并且一切正常为止。
答案 2 :(得分:0)
我将s3代理升级到1.6.0,并将aws-java-sdk-s3升级到1.1.285后,连接重置问题已解决。