amazon-web-services - 尝试从 AWS Lambda 中的缓冲区读取器读取时出现 SocketTimeoutException

标签 amazon-web-services aws-lambda socket-timeout-exception

我有一个 AWS lambda 应用程序尝试读取 csv 文件。它将文件读取为:

S3Object s3Object = S3Client.getObject(new GetObjectRequest(SrcBucketName,SrcKey));

使用以下命令逐行读取文件:

final InputStreamReader isr = new InputStreamReader(s3Object.getContent());
final BufferedReader br = new BufferedReader(isr);
try{
     aList = br.lines().skip(1)
             .map(processLines)
             .collect(toList());
   } catch (Exception e) {

   } finally {
    isr.close();
    br.close();
   }

AWS Lambda 引发间歇性套接字超时问题。 完整的堆栈跟踪是:

   Caused by: java.net.SocketTimeoutException: Read timed out
        at java.net.SocketInputStream.socketRead0(Native Method)
        at java.net.SocketInputStream.socketRead(SocketInputStream.java:116)
        at java.net.SocketInputStream.read(SocketInputStream.java:171)
        at java.net.SocketInputStream.read(SocketInputStream.java:141)
        at sun.security.ssl.InputRecord.readFully(InputRecord.java:465)
        at sun.security.ssl.InputRecord.readV3Record(InputRecord.java:593)
        at sun.security.ssl.InputRecord.read(InputRecord.java:532)
        at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:983)
        at sun.security.ssl.SSLSocketImpl.readDataRecord(SSLSocketImpl.java:940)
        at sun.security.ssl.AppInputStream.read(AppInputStream.java:105)
        at org.apache.http.impl.io.SessionInputBufferImpl.streamRead(SessionInputBufferImpl.java:139)
        at org.apache.http.impl.io.SessionInputBufferImpl.read(SessionInputBufferImpl.java:200)
        at org.apache.http.impl.io.ContentLengthInputStream.read(ContentLengthInputStream.java:178)
        at org.apache.http.conn.EofSensorInputStream.read(EofSensorInputStream.java:137)
        at com.amazonaws.internal.SdkFilterInputStream.read(SdkFilterInputStream.java:72)
        at com.amazonaws.event.ProgressInputStream.read(ProgressInputStream.java:180)
        at com.amazonaws.internal.SdkFilterInputStream.read(SdkFilterInputStream.java:72)
        at com.amazonaws.services.s3.internal.S3AbortableInputStream.read(S3AbortableInputStream.java:115)
        at com.amazonaws.internal.SdkFilterInputStream.read(SdkFilterInputStream.java:72)
        at com.amazonaws.internal.SdkFilterInputStream.read(SdkFilterInputStream.java:72)
        at com.amazonaws.internal.SdkFilterInputStream.read(SdkFilterInputStream.java:72)
        at com.amazonaws.event.ProgressInputStream.read(ProgressInputStream.java:180)
        at java.security.DigestInputStream.read(DigestInputStream.java:161)
        at com.amazonaws.services.s3.internal.DigestValidationInputStream.read(DigestValidationInputStream.java:59)
        at com.amazonaws.internal.SdkFilterInputStream.read(SdkFilterInputStream.java:72)
        at sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:284)
        at sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:326)
        at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:178)
        at java.io.InputStreamReader.read(InputStreamReader.java:184)
        at java.io.BufferedReader.fill(BufferedReader.java:161)
        at java.io.BufferedReader.readLine(BufferedReader.java:324)
        at java.io.BufferedReader.readLine(BufferedReader.java:389)

文件大小仅为 61 KB。是SDK的问题吗?你能告诉我这里出了什么问题吗?

提前致谢。

最佳答案

尝试以下操作:

    S3Object amazonS3Client.getObject(new GetObjectRequest(bucketName, filePath));
    ArrayList<String> fileContent = new ArrayList<String>();

    InputStream is = s3Object.getObjectContent;
    BufferedReader reader = new BufferedReader(new InputStreamReader(is));
    Try {
    String line;
    while ((line=reader.readLine()) != null) {
            fileContent.add(line);
    }
    } Catch (IOException e) {
            e.printStackTrace();
    } finally{
        reader.close();
        is.close();
    }

关于amazon-web-services - 尝试从 AWS Lambda 中的缓冲区读取器读取时出现 SocketTimeoutException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46096428/

相关文章:

amazon-web-services - 我们可以禁用相对于 cloudformation 中另一个参数的参数吗

aws-lambda - 如何关闭使用 AudioPlayer 界面的 Alexa 技能

javascript - s3.copyObject 未将 ServerSideEncryption 应用于目标存储桶中的对象?

java - 用于连接和读取超时的Spring重试策略

java - 当出站流被远程故障中断时,Apache HTTPClient 忽略超时配置?

python - 为什么我的 Flask 应用程序可以在 localhost 上运行,但在添加 Flask jwt 后无法在 aws EB 上运行

html - 将视频从 Controller 流式传输到 html5 视频播放器

python-requests - 套接字超时: timed out python requests

javascript - 为什么使用 AWS Signature v4 对 S3 进行 REST 调用并未真正使用签名过程?

reactjs - AWS Amplify 在任何 Lambda 故障时返回通用网络错误