Lapozás és iteráció a Javához készült Azure SDK-ban

Ez a cikk áttekintést nyújt arról, hogyan használhatja az Azure SDK for Java lapozási és iterációs funkcióit a nagy adathalmazok hatékony és hatékony használatához.

Az Azure Java SDK-ban az ügyfélkódtárak által biztosított számos művelet több eredményt ad vissza. Az Azure Java SDK ezekben az esetekben elfogadható visszatérési típusokat határoz meg annak biztosítása érdekében, hogy a fejlesztői élmény a konzisztencia révén teljes legyen. A használt visszatérési típusok a szinkronizálási API-khoz és PagedFlux az aszinkron API-khoz használhatókPagedIterable. Az API-k némileg eltérnek a különböző használati esetek miatt, de elméletileg ugyanazokkal a követelményekkel rendelkeznek:

  • Lehetővé teszi a gyűjtemény egyes elemeinek egyszerű iterálását, figyelmen kívül hagyva a manuális lapozást vagy a folytatási jogkivonatok nyomon követését. PagedFlux Ezt a feladatot is PagedIterable megkönnyítheti, ha egy lapszámozott válasz egy adott típusba Tdeszerializálva van. PagedIterable implementálja az Iterable interfészt, és egy API-t kínál a fogadáshoz Stream, míg PagedFlux egy Flux. A lapozás minden esetben transzparens, és az iteráció folytatódik, amíg az eredmények iterálódnak.

  • Lehetővé teszi a kifejezetten oldalról oldalra történő iterálást. Ezzel érthetőbbé teszi a kérések elvégzését, és lehetővé teszi az oldalankénti válaszinformációk elérését. Mindkettőt PagedIterable , és PagedFlux olyan metódusokkal is rendelkezik, amelyek a megfelelő típusokat viszik vissza oldal szerint, nem pedig egyéni elemek szerint.

Ez a cikk a Java Azure SDK szinkron és aszinkron API-k között oszlik meg. A szinkron iterációs API-k akkor lesznek láthatók, amikor szinkron ügyfelekkel dolgozik, és aszinkron iterációs API-kat, amikor aszinkron ügyfelekkel dolgozik.

Szinkron lapozás és iteráció

Ez a szakasz a szinkron API-kat ismerteti.

Iteráció az egyes elemek felett

Mint említettük, a leggyakoribb használati eset az, hogy az egyes elemeket egyenként, nem pedig oldalanként kell iterálni. Az alábbi példakódok bemutatják, hogyan teszi lehetővé az PagedIterable API a funkció implementálásához előnyben részesítendő iterációs stílus használatát.

Minden ciklushoz használjon egy-egy ciklust

A implementációk Iterablemiatt PagedIterable az alábbi példában látható módon iterálhat az elemeken:

PagedIterable<Secret> secrets = client.listSecrets();
for (Secret secret : secrets) {
   System.out.println("Secret is: " + secret);
}

Stream használata

Mivel PagedIterable egy stream() metódus van definiálva rajta, meghívhatja a standard Java Stream API-k használatára, ahogyan az alábbi példában látható:

client.listSecrets()
      .stream()
      .forEach(secret -> System.out.println("Secret is: " + secret));

Iterator használata

A implementálások Iterablemiatt PagedIterable a Java iterátor programozási stílusának engedélyezésére is van iterator() egy metódusa, ahogy az alábbi példában is látható:

Iterator<Secret> secrets = client.listSecrets().iterator();
while (it.hasNext()) {
   System.out.println("Secret is: " + it.next());
}

Iterálás több oldalon keresztül

Ha az egyes oldalakkal dolgozik, oldalonként iterálhat, például ha HTTP-válaszadatokra van szüksége, vagy ha a folytatási jogkivonatok fontosak az iterációs előzmények megőrzéséhez. Függetlenül attól, hogy oldal vagy elem szerint iterál, nincs különbség a teljesítményben vagy a szolgáltatásban indított hívások számában. Az alapul szolgáló implementáció igény szerint betölti a következő oldalt, és ha bármikor leiratkozik a PagedFlux szolgáltatásról, nincs további hívás a szolgáltatáshoz.

Minden ciklushoz használjon egy-egy ciklust

listSecrets()Híváskor kap egy PagedIterableapi-titerableByPage(). Ez az API egy Iterable<PagedResponse<Secret>> .Iterable<Secret> A PagedResponse válasz metaadatait és a folytatási jogkivonathoz való hozzáférést a következő példában látható módon biztosítja:

Iterable<PagedResponse<Secret>> secretPages = client.listSecrets().iterableByPage();
for (PagedResponse<Secret> page : secretPages) {
   System.out.println("Response code: " + page.getStatusCode());
   System.out.println("Continuation Token: " + page.getContinuationToken());
   page.getElements().forEach(secret -> System.out.println("Secret value: " + secret))
}

Van egy iterableByPage túlterhelés is, amely elfogadja a folytatási jogkivonatot. Ezt a túlterhelést akkor hívhatja meg, ha egy későbbi időpontban ugyanahhoz az iterációhoz szeretne visszatérni.

Stream használata

Az alábbi példa bemutatja, hogyan hajtja végre a streamByPage() metódus a fent látható műveletet. Ennek az API-nak van egy folytatási jogkivonat túlterhelése is, amely később ugyanahhoz az iterációhoz tér vissza.

client.listSecrets()
      .streamByPage()
      .forEach(page -> {
          System.out.println("Response code: " + page.getStatusCode());
          System.out.println("Continuation Token: " + page.getContinuationToken());
          page.getElements().forEach(secret -> System.out.println("Secret value: " + secret))
      });

Oldalak és egyes elemek aszinkron megfigyelése

Ez a szakasz az aszinkron API-kat ismerteti. Az aszinkron API-kban a hálózati hívások egy másik szálon zajlnak, mint a hívást kezdeményező subscribe()fő szál. Ez azt jelenti, hogy a fő szál az eredmény rendelkezésre állása előtt leállhat. Önnek kell gondoskodnia arról, hogy az alkalmazás ne lépjen ki, mielőtt az aszinkron művelet befejeződik.

Az egyes elemek megfigyelése

Az alábbi példa bemutatja, hogyan teszi lehetővé az API az PagedFlux egyes elemek aszinkron megfigyelését. A Flux-típusra többféleképpen is előfizethet. További információkért tekintse meg a Flux vagy Mono létrehozásának egyszerű módjait, valamint a Reactor 3 referencia-útmutatójában szereplő feliratkozást. Ez a példa egy olyan fajta, amelyben három lambda kifejezés található, egy-egy a fogyasztó, a hibafelhasználó és a teljes fogyasztó számára. Mindhárom jó gyakorlat, de bizonyos esetekben csak a fogyasztót, esetleg a hibafelhasználót kell megadni.

asyncClient.listSecrets()
   .subscribe(secret -> System.out.println("Secret value: " + secret),
       ex -> System.out.println("Error listing secrets: " + ex.getMessage()),
       () -> System.out.println("Successfully listed all secrets"));

Oldalak megfigyelése

Az alábbi példa bemutatja, hogy az PagedFlux API hogyan teszi lehetővé az egyes oldalak aszinkron megfigyelését egy API használatával byPage() , valamint egy fogyasztó, hibafelhasználó és befejező fogyasztó biztosításával.

asyncClient.listSecrets().byPage()
  .subscribe(page -> {
          System.out.println("Response code: " + page.getStatusCode());
          System.out.println("Continuation Token: " + page.getContinuationToken());
          page.getElements().forEach(secret -> System.out.println("Secret value: " + secret))
      },
      ex -> System.out.println("Error listing pages with secret: " + ex.getMessage()),
      () -> System.out.println("Successfully listed all pages with secret"));

További lépések

Most, hogy már ismeri a javai Azure SDK-ban a lapozást és az iterációt, fontolja meg a Java Azure SDK hosszú ideig futó műveleteinek áttekintését. A hosszú ideig futó műveletek olyan műveletek, amelyek hosszabb ideig futnak, mint a legtöbb normál HTTP-kérés, általában azért, mert némi erőfeszítést igényelnek a kiszolgáló oldalán.