2017-09-25 6 views
0

Tenir compte par exemple sur la version de synchronisation et vieux sdk aws:Comment itérer pour les clés de fichier s3 via CompletableFuture dans aws sdk 2.0?

public void syncIterateObjects() { 
    AmazonS3 s3Client = null; 
    String marker = null; 
    do { 
     ObjectListing objects = s3Client.listObjects(
       new ListObjectsRequest() 
         .withBucketName("bucket") 
         .withPrefix("prefix") 
         .withMarker(marker) 
         .withDelimiter("/") 
         .withMaxKeys(100) 
     ); 
     marker = objects.getNextMarker(); 
    } while (marker != null); 
} 

Tout est clair - faire/tout faire le travail. Considérons par exemple async et AWSD sdk 2,0

public void asyncIterateObjects() { 
    S3AsyncClient client = S3AsyncClient.builder().build() 

    final CompletableFuture<ListObjectsV2Response> response = client.listObjectsV2(ListObjectsV2Request.builder() 
      .delimiter("/") 
      .prefix("bucket") 
      .bucket("prefix") 
      .build()) 
      .thenApply(Function.identity()); 

    // what to do next ??? 
} 

Ok je suis arrivé CompletableFuture, mais comment le cycle course pour passer le marqueur (nextContinuationToken dans aws 2.0 sdk) entre précédent et suivant Future?

Répondre

0

Vous n'avez qu'un avenir, notez que le type est une future liste d'objets. maintenant vous devez décider si vous voulez get l'avenir ou lui appliquer d'autres transformations avant de l'obtenir. Après avoir obtenu le futur, vous pouvez utiliser la même méthode que vous avez utilisée auparavant avec le while