AWS Java SDK 设置 Lambda 超时时间和禁止 Lambda 重试
AWS Java Lambda About 1,900 words现象
AWS SDK调用Lambda时,默认有重试机制。Java默认重试3次,加上正常1次请求,上限会发送4次请求。
原始配置
@Bean
LambdaClient lambdaClient() {
return LambdaClient.builder()
.region(Region.US_EAST_1)
.credentialsProvider(DefaultCredentialsProvider.builder().build())
.build();
}
修改配置
httpClient
使用httpClient配置连接及读写超时。
connectionTimeout:建立连接超时时长。
connectionAcquisitionTimeout:从httpClient连接池中获取连接的超时时长。
socketTimeout:socket读写超时时长。注意:socketTimeout要大于等于apiCallAttemptTimeout。
maxConnections:连接池大小。
overrideConfiguration
使用overrideConfiguration覆盖配置。
retryStrategy:重试策略,DefaultRetryStrategy.doNotRetry()禁止重试。
apiCallAttemptTimeout:单次HTTP调用的超时时间。
apiCallTimeout:调用Lambda函数总超时时间。
@Bean
LambdaClient lambdaClient() {
return LambdaClient.builder()
.region(Region.US_EAST_1)
.credentialsProvider(DefaultCredentialsProvider.builder().build())
.httpClient(ApacheHttpClient.builder()
.connectionTimeout(Duration.ofMinutes(1))
.connectionAcquisitionTimeout(Duration.ofMinutes(1))
.socketTimeout(Duration.ofMinutes(6))
.maxConnections(200)
.build())
.overrideConfiguration(ClientOverrideConfiguration.builder()
.retryStrategy(DefaultRetryStrategy.doNotRetry())
.apiCallAttemptTimeout(Duration.ofMinutes(5))
.apiCallTimeout(Duration.ofSeconds(6))
.build())
.build();
}
备注
ApacheHttpClient是software.amazon.awssdk下的apache-client包,默认scope是runtime,导致IDEA等代码编辑器报错。
在pom.xml中显示定义即可。
<dependency>
<groupId>software.amazon.awssdk</groupId>
<artifactId>lambda</artifactId>
</dependency>
<dependency>
<artifactId>apache-client</artifactId>
<groupId>software.amazon.awssdk</groupId>
</dependency>
文档
https://repost.aws/knowledge-center/lambda-function-retry-timeout-sdk
———         Thanks for Reading         ———
Give me a Star, Thanks:)
https://github.com/fendoudebb/LiteNote扫描下方二维码关注公众号和小程序↓↓↓