如何判断 AmazonS3Client 是否已关闭?

4

有没有办法判断AmazonS3Client是否已关闭?

以下是我想要实现的场景,以避免每次创建新客户端,并确保如果某些其他组件误关闭它,则不会破坏下一个请求。

 private AmazonS3ClientBuilder createBuilder() {

        return AmazonS3ClientBuilder.standard()
                .withCredentials(InstanceProfileCredentialsProvider.getInstance();)
                .withRegion(clientRegion);
    }


    public synchronized AmazonS3 buildAmazonClient() {
        if (s3Client == null || s3Client.*IS_SHUTDOWN?*)
            s3Client = buildAmazonClient();
        return s3Client;
    }

1
哎呀,我甚至不知道S3客户端还有shutdown()方法,而我已经在其上构建了应用程序。AWS-SDK真是一团糟。 - chrylis -cautiouslyoptimistic-
哈哈,只要没有人关闭它,它应该能正常工作,除非你正在创建多个客户端,否则可能会有泄漏。 - Martin Blaustein
1个回答

1
根据 Amazon SDK开发者指南

SDK中的服务客户端是线程安全的,为了获得最佳性能,您应该将它们视为长期存在的对象。每个客户端都有自己的连接池资源。

Amazon SDK参考

这是一个可选的方法,调用者不需要调用它,但如果他们想要明确释放任何打开的资源,可以这样做。

所以虽然似乎没有检查它是否已关闭(即客户端不能再用于发出请求)的方法,但您可以自己管理它,
但实际上您并不需要: 由于它是一个长期存在的对象,您不应创建太多实例,并在不再计划访问它们时选择可选地调用关闭。
如果您确实有这样的用例,需要在应用程序的整个生命周期中实例化和销毁不同的实例,我建议您关注shutdown调用,以便您可以确定它是否已关闭(尽管一旦资源被释放,就不再需要保留对已关闭客户端的引用...)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接