Как узнать, был ли отключен AmazonS3Client?

Есть ли способ узнать, был ли отключен 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;
    }

person Martin Blaustein    schedule 14.01.2020    source источник
comment
Хм, я даже не знал, что у клиента S3 есть shutdown(), и я создавал приложения поверх него. AWS-SDK — это такой беспорядок.   -  person chrylis -cautiouslyoptimistic-    schedule 14.01.2020
comment
ха-ха, пока никто не выключает его, он должен работать нормально, если только вы не создаете несколько клиентов, у вас, вероятно, есть утечка.   -  person Martin Blaustein    schedule 14.01.2020


Ответы (1)


Согласно Руководству разработчика Amazon SDK:

Клиенты служб в SDK ориентированы на многопотоковое исполнение, и для повышения производительности их следует рассматривать как долгоживущие объекты. У каждого клиента есть собственный ресурс пула соединений.

и Справочник по Amazon SDK :

Это необязательный метод, и вызывающие стороны не должны вызывать его, но могут, если хотят явным образом освободить какие-либо открытые ресурсы.

Таким образом, несмотря на то, что не существует способа проверить, выключен ли он уже (т. е. клиент больше не может выполнять запросы), похоже, вы могли бы управлять им самостоятельно,
но вы на самом деле не нужно:

Поскольку это долгоживущий объект, вам не следует создавать слишком много экземпляров и при необходимости вызывать завершение работы, когда вы больше не планируете к ним обращаться.

Если у вас действительно есть вариант использования, в котором вам нужно создавать и уничтожать разные экземпляры на протяжении всего жизненного цикла вашего приложения, я бы посоветовал вам следить за своим вызовом shutdown, чтобы вы могли определить, было ли оно уже отключено (хотя как только ресурсы будут освобождены, больше не будет необходимости хранить ссылку на отключенный клиент...)

person Shlomi Uziel    schedule 17.01.2020