将单例服务客户端实例与AWS SDK for Java 2.x 一起使用
AWS SDK for Java 2.x 中的服务客户端是线程安全的。您可以为每个服务客户端创建一个实例,并在整个应用程序中重复使用该实例。这种方法可以提高性能并更有效地管理资源。
单例服务客户端的好处
- 连接池
-
服务客户端维护内部 HTTP 连接池。创建和销毁这些池的成本很高。当您重复使用客户端时,可以在不同请求之间高效共享这些池。
- 降低了初始化开销
-
创建客户端涉及加载配置、建立凭证和初始化内部组件。使用单例实例可消除这种开销。
- 更高效地利用资源
-
使用单例客户端可防止因为创建许多客户端实例而耗尽资源。
创建和使用单例服务客户端
以下示例说明了如何创建和使用单例服务客户端:
// Create one instance and use it throughout the application. public class ServiceClientSource { private static final S3Client s3Client = S3Client.create(); public static S3Client getS3Client() { return s3Client; } }
不要为每个操作创建新客户端:
// This approach creates unnecessary overhead. public void badExample() { try (S3Client s3 = S3Client.create()) { s3.listBuckets(); } }
重要注意事项
-
服务客户端是线程安全的。您可以安全地在多个线程中共享客户端。
-
仅在应用程序关闭或不再需要客户端时才关闭客户端。在应用程序级别使用
client.close()或 try-with-resources。 -
如果您需要不同的配置(例如区域或凭证),请为每个配置创建单独的单例实例。
如果您使用像 Spring 这样的依赖项注入框架,请将服务客户端配置为单例 bean。这样可以确保适当的生命周期管理。