Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.
Usa un client S3 performante: client S3 basato su AWS CRT
Il client S3 AWS basato su CRT, basato su AWS Common Runtime (CRT), è un client asincrono S3 alternativo. Trasferisce oggetti da e verso Amazon Simple Storage Service (Amazon S3) con prestazioni e affidabilità migliorate utilizzando automaticamente l'API di caricamento multiparte e i recuperi per intervallo di byte di Amazon S3.
Il client S3 AWS basato su CRT migliora l'affidabilità del trasferimento in caso di guasto della rete. L'affidabilità è migliorata riprovando le singole parti non riuscite di un trasferimento di file senza riavviare il trasferimento dall'inizio.
Inoltre, il client S3 AWS basato su CRT offre un pool di connessioni avanzato e un bilanciamento del carico DNS (Domain Name System), che migliora anche la velocità effettiva.
Puoi utilizzare il client S3 AWS basato su CRT al posto del client asincrono S3 standard dell'SDK e sfruttare subito il suo throughput migliorato.
AWS Componenti basati su CRT nell'SDK
Il client S3 AWS basato su CRT, descritto in questo argomento, e il client HTTP AWS basato su CRT sono componenti diversi dell'SDK.
Il client S3 AWS basato su CRT è un'implementazione dell'AsyncClientinterfaccia S3S3AsyncClient
Il client HTTP AWS basato su CRT è un'implementazione dell'SdkAsyncHttpClientSdkAsyncHttpClient
interfaccia e offre diversi vantaggi.
Sebbene entrambi i componenti utilizzino librerie di AWS Common Runtime, il client S3 AWS basato su CRT utilizza la libreria aws-c-s 3 e supporta le funzionalità
Aggiungi dipendenze per utilizzare il client S3 basato su CRT AWS
Per utilizzare il client S3 AWS basato su CRT, aggiungi le seguenti due dipendenze al tuo file di progetto Maven. L'esempio mostra le versioni minime da utilizzare. Cerca nel repository centrale di Maven le versioni più recenti degli artefatti s3
<dependency> <groupId>software.amazon.awssdk</groupId> <artifactId>s3</artifactId> <version>
2.27.21
</version> </dependency> <dependency> <groupId>software.amazon.awssdk.crt</groupId> <artifactId>aws-crt</artifactId> <version>0.30.11
</version> </dependency>
Crea un'istanza AWS del client S3 basato su CRT
Crea un'istanza del client S3 AWS basato su CRT con le impostazioni predefinite, come mostrato nel seguente frammento di codice.
S3AsyncClient s3AsyncClient = S3AsyncClient.crtCreate();
Per configurare il client, utilizzate il generatore di client CRT. AWS È possibile passare dal client asincrono S3 standard al client basato su AWS CRT modificando il metodo del generatore.
import software.amazon.awssdk.auth.credentials.DefaultCredentialsProvider; import software.amazon.awssdk.regions.Region; import software.amazon.awssdk.services.s3.S3AsyncClient; S3AsyncClient s3AsyncClient = S3AsyncClient.crtBuilder() .credentialsProvider(DefaultCredentialsProvider.create()) .region(Region.US_WEST_2) .targetThroughputInGbps(20.0) .minimumPartSizeInBytes(8 * 1025 * 1024L) .build();
Nota
Alcune impostazioni del generatore standard potrebbero non essere attualmente supportate nel generatore del client CRT. AWS Scarica lo standard builder chiamando. S3AsyncClient#builder()
Usa il client S3 AWS basato su CRT
Usa il client S3 AWS basato su CRT per chiamare le operazioni dell'API Amazon S3. L'esempio seguente illustra le operazioni PutObject
import software.amazon.awssdk.core.async.AsyncRequestBody; import software.amazon.awssdk.core.async.AsyncResponseTransformer; import software.amazon.awssdk.services.s3.S3AsyncClient; import software.amazon.awssdk.services.s3.model.GetObjectResponse; import software.amazon.awssdk.services.s3.model.PutObjectResponse; S3AsyncClient s3Client = S3AsyncClient.crtCreate(); // Upload a local file to Amazon S3. PutObjectResponse putObjectResponse = s3Client.putObject(req -> req.bucket(
<BUCKET_NAME>
) .key(<KEY_NAME>
), AsyncRequestBody.fromFile(Paths.get(<FILE_NAME>
))) .join(); // Download an object from Amazon S3 to a local file. GetObjectResponse getObjectResponse = s3Client.getObject(req -> req.bucket(<BUCKET_NAME>
) .key(<KEY_NAME>
), AsyncResponseTransformer.toFile(Paths.get(<FILE_NAME>
))) .join();
Caricamento di stream di dimensioni sconosciute
Un vantaggio significativo del client S3 AWS AWS basato su CRT è la sua capacità di gestire in modo efficiente flussi di input di dimensioni sconosciute. Ciò è particolarmente utile quando è necessario caricare dati da una fonte in cui la dimensione totale non può essere determinata in anticipo.
public PutObjectResponse crtClient_stream_unknown_size(String bucketName, String key, InputStream inputStream) { S3AsyncClient s3AsyncClient = S3AsyncClient.crtCreate(); ExecutorService executor = Executors.newSingleThreadExecutor(); AsyncRequestBody body = AsyncRequestBody.fromInputStream(inputStream, null, executor); // 'null' indicates that the // content length is unknown. CompletableFuture<PutObjectResponse> responseFuture = s3AsyncClient.putObject(r -> r.bucket(bucketName).key(key), body) .exceptionally(e -> { if (e != null){ logger.error(e.getMessage(), e); } return null; }); PutObjectResponse response = responseFuture.join(); // Wait for the response. executor.shutdown(); return response; }
Questa funzionalità consente di evitare problemi comuni con i caricamenti tradizionali, in cui una specifica errata della lunghezza dei contenuti può portare a oggetti troncati o a caricamenti non riusciti.
Limitazioni di configurazione
Il client S3 AWS basato su CRT e il client asincrono S3 basato su Java offrono funzionalità comparabili, mentre il client S3 basato su CRT offre un vantaggio in termini di prestazioni. AWS Tuttavia, il client S3 basato su CRT non dispone delle impostazioni di configurazione del AWS client asincrono S3 basato su Java. Queste impostazioni includono:
-
Configurazione a livello di client: timeout dei tentativi di chiamata API, intercettori di esecuzione della compressione, editori di metriche, attributi di esecuzione personalizzati, opzioni avanzate personalizzate, servizio esecutore pianificato personalizzato, intestazioni personalizzate
-
Configurazione a livello di richiesta: firmatari personalizzati, fornitori di credenziali, timeout dei tentativi di chiamata API
Per un elenco completo delle differenze di configurazione, consulta il riferimento all'API.
Client asincrono S3 basato su Java | AWS Client S3 basato su CRT |
---|---|
Configurazioni a livello di client Configurazioni a livello di richiesta |
Configurazioni a livello di client Nessuna configurazione a livello di richiesta |