程序问答   发布时间:2022-06-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了AWS Lambda 抛出 ReadTimeout大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决AWS Lambda 抛出 ReadTimeout?

开发过程中遇到AWS Lambda 抛出 ReadTimeout的问题如何解决?下面主要结合日常开发的经验,给出你关于AWS Lambda 抛出 ReadTimeout的解决方法建议,希望对你解决AWS Lambda 抛出 ReadTimeout有所启发或帮助; @H_197_2@我需要调用一次 lambda 函数(无需重试)。 执行该 lambda 最多需要 5/10 分钟。

@H_197_2@我发现了多篇关于超时的帖子,每一篇都没有成功

try {
    Invokerequest invokerequest = new Invokerequest()
        .withFunctionname("mylambdaname")
        .withPayload(objectMapper.writeValueAsString(payload));

    //invokerequest.setSdkrequestTimeout(0);
    //invokerequest.setSdkClIEntexecutionTimeout(0);
    //invokerequest.withSdkrequestTimeout(0);
    //invokerequest.withSdkClIEntexecutionTimeout(0);

    AWSLambda awsLambda = AWSLambdaClIEntBuilder.standard()
        .withCredentials(new EC2ContainerCredentialsProvIDerWrapper())
        .withRegion(Regions.EU_West_1)
        .withClIEntConfiguration(new ClIEntConfiguration()
            //.withConnectionTimeout(0)
            //.withrequestTimeout(0)
            //.withClIEntexecutionTimeout(0)
            //.withSocketTimeout(0)
            .withMaxErrorRetry(0)
        ).build();

    awsLambda.invoke(invokerequest);
} catch (serviceException | JsonProcessingException E) {
    LOGGER.error(e.getmessage());
}
@H_197_2@设置超时(如 15*60*1000)或无 (0) 仍会在恰好一分钟后触发 ReadTimeout。 我还尝试从 AWS 安装 SDK v2,但出现了同样的问题。

@H_197_2@尝试过的例子:

  • AWS Lambda timeout when another (long) Lambda is invoked
  • How to increase the timeout for AWS Lambda client
  • AWS Lambda Java function invoked multiple times
@H_197_2@PS:如果长任务被缩短,lambda 确实可以工作,所以这里的一切都与超时有关

@H_197_2@完整的堆栈跟踪

@H_197_2@java.net.socketTimeoutException:读取超时 在 java.net.sockeTinputStream.socketRead0(本机方法) 在 java.net.sockeTinputStream.socketRead(SockeTinputStream.java:116) 在 java.net.sockeTinputStream.read(SockeTinputStream.java:171) 在 java.net.sockeTinputStream.read(SockeTinputStream.java:141) 在 sun.security.ssl.SSLSockeTinputRecord.read(SSLSockeTinputRecord.java:457) 在 sun.security.ssl.SSLSockeTinputRecord.bytesInCompletePacket(SSLSockeTinputRecord.java:68) 在 sun.security.ssl.SSLSocketImpl.readApplicationRecord(SSLSocketImpl.java:1095) 在 sun.security.ssl.SSLSocketImpl.access$200(SSLSocketImpl.java:72) 在 sun.security.ssl.SSLSocketImpl$AppinputStream.read(SSLSocketImpl.java:815) 在 org.apache.http.impl.io.SessioninputBufferImpl.streamRead(SessioninputBufferImpl.java:137) 在 org.apache.http.impl.io.SessioninputBufferImpl.fillBuffer(SessioninputBufferImpl.java:153) 在 org.apache.http.impl.io.SessioninputBufferImpl.readline(SessioninputBufferImpl.java:280) 在 org.apache.http.impl.conn.DefaulthttpResponseParser.parsehead(DefaulthttpResponseParser.java:138) 在 org.apache.http.impl.conn.DefaulthttpResponseParser.parsehead(DefaulthttpResponseParser.java:56) 在 org.apache.http.impl.io.AbstractmessageParser.parse(AbstractmessageParser.java:259) 在 org.apache.http.impl.DefaultBhttpClIEntConnection.receiveResponseheader(DefaultBhttpClIEntConnection.java:163) 在 org.apache.http.impl.conn.CPoolProxy.receiveResponseheader(CPoolProxy.java:157) 在 org.apache.http.protocol.httprequestExecutor.doReceiveResponse(httprequestExecutor.java:273) 在 com.amazonaws.http.protocol.SdkhttprequestExecutor.doReceiveResponse(SdkhttprequestExecutor.java:82) 在 org.apache.http.protocol.httprequestExecutor.execute(httprequestExecutor.java:125) 在 org.apache.http.impl.execchain.MainClIEntexec.execute(MainClIEntexec.java:272) 在 org.apache.http.impl.execchain.ProtocolExec.execute(ProtocolExec.java:186) 在 org.apache.http.impl.clIEnt.InternalhttpClIEnt.doExecute(InternalhttpClIEnt.java:185) 在 org.apache.http.impl.clIEnt.CloseablehttpClIEnt.execute(CloseablehttpClIEnt.java:83) 在 org.apache.http.impl.clIEnt.CloseablehttpClIEnt.execute(CloseablehttpClIEnt.java:56) 在 com.amazonaws.http.apache.clIEnt.impl.SdkhttpClIEnt.execute(SdkhttpClIEnt.java:72) 在 com.amazonaws.http.AmazonhttpClIEnt$requestExecutor.executeOnerequest(AmazonhttpClIEnt.java:1258) 在 com.amazonaws.http.AmazonhttpClIEnt$requestExecutor.executeHelper(AmazonhttpClIEnt.java:1074) 在 com.amazonaws.http.AmazonhttpClIEnt$requestExecutor.doExecute(AmazonhttpClIEnt.java:745) 在 com.amazonaws.http.AmazonhttpClIEnt$requestExecutor.executeWithTimer(AmazonhttpClIEnt.java:719) 在 com.amazonaws.http.AmazonhttpClIEnt$requestExecutor.execute(AmazonhttpClIEnt.java:701) 在 com.amazonaws.http.AmazonhttpClIEnt$requestExecutor.access$500(AmazonhttpClIEnt.java:669) 在 com.amazonaws.http.AmazonhttpClIEnt$requestExecutionBuilderImpl.execute(AmazonhttpClIEnt.java:651) 在 com.amazonaws.http.AmazonhttpClIEnt.execute(AmazonhttpClIEnt.java:515) 在 com.amazonaws.services.lambda.AWSLambdaClIEnt.doInvoke(AWSLambdaClIEnt.java:2682) 在 com.amazonaws.services.lambda.AWSLambdaClIEnt.invoke(AWSLambdaClIEnt.java:2651) 在 com.amazonaws.services.lambda.AWSLambdaClIEnt.invoke(AWSLambdaClIEnt.java:2640) 在 com.amazonaws.services.lambda.AWSLambdaClIEnt.executeInvoke(AWSLambdaClIEnt.java:1503) 在 com.amazonaws.services.lambda.AWSLambdaClIEnt.invoke(AWSLambdaClIEnt.java:1474)
在 Repository.invokeLambda(Repository.java:60)
service.invoke(service.java:40)
在 Controller.invoke(Controller.java:37)
在控制器$$FastClassBySpringcglib$$9d602606.invoke()

解决方法

@H_197_2@这些方法应该可以完成我看到您已注释掉的技巧:

  • TOOL_NODE_FLAGS
  • setSDKrequestTimeout(int milliseconds)
@H_197_2@我认为您不应该使用 0。您应该使用 setSdkClientexecutionTimeout(int milliseconds)

@H_197_2@https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/AmazonWebservicerequest.html#setSdkrequestTimeout-int-

大佬总结

以上是大佬教程为你收集整理的AWS Lambda 抛出 ReadTimeout全部内容,希望文章能够帮你解决AWS Lambda 抛出 ReadTimeout所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签:抛出