Как я могу узнать, что AmazonS3Client был закрыт? - PullRequest
3 голосов
/ 14 января 2020

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

1 голос
/ 17 января 2020

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

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

и Ссылка Amazon SDK :

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

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

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

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

...