Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
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 szinkron API-k esetében a PagedIterable visszatérési típusokat, míg az aszinkron API-k esetében a PagedFlux típusokat használják. 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, hogy könnyedén végigmenjen a gyűjtemény egyes elemein, figyelmen kívül hagyva a manuális lapozást vagy a folytatási tokenek nyomon követésének szükségességét. Mind
PagedIterable, mindPagedFluxmegkönnyíti ezt a feladatot azáltal, hogy egy lapozott választ egy adott típusraTdeszerializálva iterál.PagedIterableazIterableinterfészt valósítja meg, és API-t kínál aStreamfogadására, mígPagedFluxFluxbiztosít. A lapozás minden esetben átlátható, és az iteráció folytatódik, amíg vannak eredmények, amelyeken iterálni lehet.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ő
PagedIterableésPagedFluxolyan metódusokkal rendelkezik, amelyek a megfelelő típusokat adnak vissza oldal szerint, nem pedig egyéni elemek szerint iterálva.
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.
Az egyes elemeket elemenként iterálni
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.
Használjon for-each ciklust
Azért, mert PagedIterable megvalósítja Iterable-et, 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 PagedIterable implementálja a Iterable, ezért van egy iterator() metódusa, amely lehetővé teszi a Java iterátor programozási stílust, ahogy az alábbi példában látható.
Iterator<Secret> secrets = client.listSecrets().iterator();
while (it.hasNext()) {
System.out.println("Secret is: " + it.next());
}
Oldalak végigiterálása
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.
Használjon for-each ciklust
Amikor listSecrets() hívja, kap egy PagedIterable, amelynek van egy iterableByPage() API-ja. Ez az API egy Iterable<PagedResponse<Secret>>-t hoz létre egy Iterable<Secret> helyett. 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 változat is, amely elfogadja a folytatási token-t. 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 token túlterhelése is, amely lehetővé teszi a későbbi visszatérést ugyanahhoz az iterációs ponthoz.
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 lásd a Flux vagy Mono létrehozásának és arra való feliratkozásnak egyszerű módjait a Reactor 3 Reference Guide-ban. 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, ismét egy byPage() API használatával, valamint egy fogyasztó, hibafogyasztó é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"));
Következő 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.