- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个现有的 aws lambda 函数,我正在尝试使用 AWSLambdaClient(库:aws-java-sdk-lambda) 调用它。如果 lambda 的运行时间少于 5 分钟,我会得到响应。但是如果 lambda 运行时间超过 5 分钟,我会得到异常:
com.amazonaws.SdkClientException: Unable to execute HTTP request: The target server failed to respond
设置 lambda 客户端时我缺少什么配置?
完整堆栈跟踪:
Exception in thread "main" com.amazonaws.SdkClientException: Unable to execute HTTP request: The target server failed to respond
at com.amazonaws.http.AmazonHttpClient$RequestExecutor.handleRetryableException(AmazonHttpClient.java:1163)
at com.amazonaws.http.AmazonHttpClient$RequestExecutor.executeHelper(AmazonHttpClient.java:1109)
at com.amazonaws.http.AmazonHttpClient$RequestExecutor.doExecute(AmazonHttpClient.java:758)
at com.amazonaws.http.AmazonHttpClient$RequestExecutor.executeWithTimer(AmazonHttpClient.java:732)
at com.amazonaws.http.AmazonHttpClient$RequestExecutor.execute(AmazonHttpClient.java:714)
at com.amazonaws.http.AmazonHttpClient$RequestExecutor.access$500(AmazonHttpClient.java:674)
at com.amazonaws.http.AmazonHttpClient$RequestExecutionBuilderImpl.execute(AmazonHttpClient.java:656)
at com.amazonaws.http.AmazonHttpClient.execute(AmazonHttpClient.java:520)
at com.amazonaws.services.lambda.AWSLambdaClient.doInvoke(AWSLambdaClient.java:3154)
at com.amazonaws.services.lambda.AWSLambdaClient.invoke(AWSLambdaClient.java:3121)
at com.amazonaws.services.lambda.AWSLambdaClient.invoke(AWSLambdaClient.java:3110)
at com.amazonaws.services.lambda.AWSLambdaClient.executeInvoke(AWSLambdaClient.java:1735)
at com.amazonaws.services.lambda.AWSLambdaClient.invoke(AWSLambdaClient.java:1707)
at LambdaTest.main(LambdaTest.java:48)
Caused by: org.apache.http.NoHttpResponseException: The target server failed to respond
at org.apache.http.impl.conn.DefaultHttpResponseParser.parseHead(DefaultHttpResponseParser.java:141)
at org.apache.http.impl.conn.DefaultHttpResponseParser.parseHead(DefaultHttpResponseParser.java:56)
at org.apache.http.impl.io.AbstractMessageParser.parse(AbstractMessageParser.java:259)
at org.apache.http.impl.DefaultBHttpClientConnection.receiveResponseHeader(DefaultBHttpClientConnection.java:163)
at org.apache.http.impl.conn.CPoolProxy.receiveResponseHeader(CPoolProxy.java:165)
at org.apache.http.protocol.HttpRequestExecutor.doReceiveResponse(HttpRequestExecutor.java:273)
at com.amazonaws.http.protocol.SdkHttpRequestExecutor.doReceiveResponse(SdkHttpRequestExecutor.java:82)
at org.apache.http.protocol.HttpRequestExecutor.execute(HttpRequestExecutor.java:125)
at org.apache.http.impl.execchain.MainClientExec.execute(MainClientExec.java:272)
at org.apache.http.impl.execchain.ProtocolExec.execute(ProtocolExec.java:185)
at org.apache.http.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:185)
at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:83)
at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:56)
at com.amazonaws.http.apache.client.impl.SdkHttpClient.execute(SdkHttpClient.java:72)
at com.amazonaws.http.AmazonHttpClient$RequestExecutor.executeOneRequest(AmazonHttpClient.java:1285)
at com.amazonaws.http.AmazonHttpClient$RequestExecutor.executeHelper(AmazonHttpClient.java:1101)
... 12 more
我已经在 aws lambda 控制台上将我的 lambda 最大超时增加到 15 分钟。我还更改了代码并将 ClientExecutionTimeout
、ConnectionTimeout
、RequestTimeout
和 SocketTimeout
设置为 15 分钟(900 秒)在 AWSLambdaClient 配置中。
ClientConfiguration configuration = new ClientConfiguration()
.withMaxErrorRetry(0)
// These is measured in milliseconds.
.withClientExecutionTimeout(900 * 1000)
.withConnectionTimeout(900 * 1000)
.withRequestTimeout(900 * 1000)
.withSocketTimeout(900 * 1000);
AWSLambda lambdaClient = AWSLambdaClientBuilder
.standard()
.withRegion(region)
.withClientConfiguration(configuration)
.withCredentials(new AWSStaticCredentialsProvider(creds)).build();
InvokeRequest request = new InvokeRequest()
.withFunctionName(functionName)
.withInvocationType(InvocationType.RequestResponse)
.withLogType(LogType.Tail);
InvokeResult result = lambdaClient.invoke(request);
String responseLog = new String(Base64.getDecoder().decode(result.getLogResult()), StandardCharsets.UTF_8);
System.out.println(responseLog);
我使用的是 apache HttpClient: 4.5.5
我看到了一些问题 https://stackoverflow.com/a/44703601/9669982我也尝试了一些配置:
configuration.setValidateAfterInactivityMillis(900 * 1000);
为了尝试更多,我还使用了:
configuration.setConnectionMaxIdleMillis(900*1000);
configuration.setUseTcpKeepAlive(true);
但没有运气。
在 AWS Cloudwatch 上,我看到我的 lambda 函数运行良好并且执行了完整任务,并且在 cloudwatch 上没有任何类型的错误痕迹,但我遇到了上述异常。
我无法得到我所缺少的东西。
最佳答案
众所周知的问题
I get the response if the runtime for lambda is less than 5 mins. But if the lambda runtime is more than 5 mins I get the exception:
由连接管理器保持事件状态的连接变得陈旧。也就是说,目标服务器在其端关闭连接,而 HttpClient 无法对该事件使用react。
您需要为您的 HTTP 客户端添加 setHttpRequestRetryHandler,如以下链接中所回答。
关于amazon-web-services - AWSLambdaClient 调用给出异常 : com. amazonaws.SdkClientException:无法执行 HTTP 请求:目标服务器无法响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54122381/
我正在尝试遵循此存储库中的 SQS 示例 https://github.com/jonyfs/spring-boot-jms-sqs 。我已将 Spring boot 升级到 2.1.0-RELEAS
我正在使用此代码在 S3 上上传目录。 TransferManager transferManager = new TransferManager(s3client); MultipleFileUpl
我正在尝试将文件上传到 AWS s3 存储桶。我不断收到此异常“SdkClientException:无法执行 HTTP 请求:连接重置”。 我正在尝试通过输入流上传 AmazonS3 s3Clien
我有一个现有的 aws lambda 函数,我正在尝试使用 AWSLambdaClient(库:aws-java-sdk-lambda) 调用它。如果 lambda 的运行时间少于 5 分钟,我会得到
我有一个 java (AWS Java SDK 1.11.313) SQS 消费者每 20 秒轮询一个队列,它已经运行了将近一周。这段时间它失败了两次,两次都抛出以下异常: com.amazonaws
我正在使用 Docker 开发本地 AWS 粘合作业(使用 pyspark)。我有一个 python 文件 (song_data.py),其中包含使用 GlueContext 类的 aws 胶水作业。
我想从 S3 java v1 迁移到 v2,现在由于某种原因,一些集成测试开始失败。当调试和单步执行它时,它正在工作。这是代码(我有一个 localstack https://github.com/l
我是一名优秀的程序员,十分优秀!