Клиент Rekognition продолжает перестраиваться при каждом запросе

Я использую AWS Rekognition для создания приложения, и я понял, что каждый раз, когда я делаю запрос к службе, соединение с aws продолжает восстанавливаться, что снижает производительность. Есть ли способ сделать одно единственное соединение, которое сохраняется на протяжении всего сеанса? Мой код можно увидеть ниже:

private static final AmazonRekognition rekognitionClient = RekognitionUtil.setupRekognitionClient();

private static AWSCredentialsProvider setupCredentials(String accessKey, String secretKey) {

    AWSCredentialsProvider provider = new AWSCredentialsProvider() {
        @Override
        public AWSCredentials getCredentials() {
            return new AWSCredentials() {
                @Override
                public String getAWSAccessKeyId() {
                    LOG.info("Access key: "  + ConfigUtil.getString(ConfigConstants.CONFIG_REKOGNITION_ACCESS_KEY,accessKey));
                    return ConfigUtil.getString(ConfigConstants.CONFIG_REKOGNITION_ACCESS_KEY,accessKey);
                }

                @Override
                public String getAWSSecretKey() {
                    LOG.info("Secret key: "  + ConfigUtil.getString(ConfigConstants.CONFIG_REKOGNITION_SECRET_KEY,secretKey));
                    return ConfigUtil.getString(ConfigConstants.CONFIG_REKOGNITION_SECRET_KEY,secretKey);
                }
            };
        }

        @Override
        public void refresh() {

        }
    };

    return provider;

}


private static AmazonRekognition setupRekognitionClient() {

    AWSCredentialsProvider provider = setupCredentials("xxxx", "xxxx");

    return AmazonRekognitionClientBuilder.standard().withCredentials(provider).withRegion(ConfigUtil.getString(ConfigConstants.CONFIG_REKOGNITION_REGION,"xxx")).build();

}

  private static AWSCredentialsProvider setupCredentials(String accessKey, String secretKey) {

    AWSCredentialsProvider provider = new AWSCredentialsProvider() {
        @Override
        public AWSCredentials getCredentials() {
            return new AWSCredentials() {
                @Override
                public String getAWSAccessKeyId() {
                    LOG.info("Access key: "  + ConfigUtil.getString(ConfigConstants.CONFIG_REKOGNITION_ACCESS_KEY,accessKey));
                    return ConfigUtil.getString(ConfigConstants.CONFIG_REKOGNITION_ACCESS_KEY,accessKey);
                }

                @Override
                public String getAWSSecretKey() {
                    LOG.info("Secret key: "  + ConfigUtil.getString(ConfigConstants.CONFIG_REKOGNITION_SECRET_KEY,secretKey));
                    return ConfigUtil.getString(ConfigConstants.CONFIG_REKOGNITION_SECRET_KEY,secretKey);
                }
            };
        }

        @Override
        public void refresh() {

        }
    };

    return provider;

}


private static AmazonRekognition setupRekognitionClient() {

    AWSCredentialsProvider provider = setupCredentials("xxxx", "xxx");

    return AmazonRekognitionClientBuilder.standard().withCredentials(provider).withRegion(ConfigUtil.getString(ConfigConstants.CONFIG_REKOGNITION_REGION,"xxx")).build();

}




 public static String searchCollectionByFace(String collectionId, ByteBuffer sourceByteBuffer) throws Exception {

    LOG.info("Searching face collection by face...");

    String faceId = "";

    try {

        ObjectMapper objectMapper = new ObjectMapper();

        // Get an image object from S3 bucket.
        Image image = new Image().withBytes(sourceByteBuffer);

        // Search collection for faces similar to the largest face in the image.
        SearchFacesByImageRequest searchFacesByImageRequest = new SearchFacesByImageRequest().withCollectionId(collectionId).withImage(image).withFaceMatchThreshold(70F).withMaxFaces(2);

        SearchFacesByImageResult searchFacesByImageResult = rekognitionClient.searchFacesByImage(searchFacesByImageRequest);

        List<FaceMatch> faceImageMatches = searchFacesByImageResult.getFaceMatches();

        for (FaceMatch face : faceImageMatches) {
            LOG.info(face.getFace().getFaceId());
            if(face.getFace().getConfidence() > SIMILARITY_LIMIT){
                faceId = face.getFace().getFaceId();
            }
        }

        return faceId;

    } catch (Exception ex) {

        LOG.error("Error has occurred searching for face", ex);
        throw new Exception();

    }

}

person QuickCare Surgery    schedule 09.02.2020    source источник
comment
SDK имеет предварительно настроенные значения по умолчанию для таких вещей, как максимальное количество подключений. Здесь вы можете изменить некоторые параметры поведения, см. docs.aws.amazon.com/sdk-for-java/v1/developer-guide/ и stackoverflow.com/questions/16354966/.   -  person jarmod    schedule 10.02.2020


Ответы (1)


Можно попробовать настроить:

в конфигурации клиента вы передать клиенту.

person andresp    schedule 09.02.2020
comment
Благодарю вас! Ценить это! - person QuickCare Surgery; 10.02.2020