java - 如何在 aws lambda 中关闭 aws 客户端
问题描述
我正在尝试使用将使用 aws sdk SqsClient 和 SnsClient 的 Java 正确编写 aws lambda。我看到这些客户端实现close()
了方法,当不再需要客户端时调用此方法通常是一个好习惯。以及 lambda ( https://docs.aws.amazon.com/lambda/latest/dg/best-practices.html )的最佳实践建议
在函数句柄之外初始化 SDK 客户端和数据库连接
所以,我的问题是:aws lambda 是否足够明智地自动关闭 aws sdk 客户端,这样我就可以编写这样的东西,并且不用担心在关闭 lambda 容器时显式关闭客户端。
public class SQSProcessingHandler implements RequestHandler<String, String> {
private SqsClient sqsClient = SqsClient.create();
@Override
public String handleRequest(final String event, final Context context) {
ListQueuesResponse response = sqsClient.listQueues();
return response.queueUrls().stream().collect(Collectors.joining(","));
}
}
如果仍需要显式关闭,请您帮我找出如何知道 lambda 容器即将关闭,以便我应该致电close()
客户端?
解决方案
为获得最佳实践,您应该明确关闭客户端,除非您有理由不这样做。
SDK 中的服务客户端是线程安全的。为了获得最佳性能,请将它们视为长寿命对象。每个客户端都有自己的连接池资源,当客户端被垃圾回收时会释放这些资源。AWS SDK for Java 2.0 中的客户端现在扩展了 AutoClosable 接口。要获得最佳实践,请通过调用 close 方法显式关闭客户端。
不明确关闭客户端的原因:
为获得最佳性能,请勿显式关闭客户端。这是因为未关闭的客户端通过在打开后保留在可重用连接池中来维护与服务的套接字。因此,当再次调用 lambda 时,客户端可能会被重用。Lambda 可以并且会在以后自动为您关闭客户端,即使您没有明确关闭它。
参考:https ://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/creating-clients.html
推荐阅读
- scheme - 我将如何编写一个采用列表并返回通过切换列表中的连续元素创建的列表的 Scheme 过程?
- c++ - Node 中的 C++ WebAssembly:instance.sum 不是函数
- grpc - grpc 如何允许客户端和服务器语言之间的不同版本
- amazon-ec2 - AWS 防火墙允许来自 EKS 的流量
- javascript - .Value 在 javascript 中给出控制台错误
- python - 日期时间熊猫总和
- java - 如何获取接收到 Intent 的变量,使其成为静态变量,并将其发送到 Android 上的另一个类?
- python - Django如何知道对象是否存在
- archlinux - 如何在介子构建系统中添加 libzip 作为依赖项
- javascript - 如何使用选项文本设置 select2 选定值?