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 isPagedIterable
megkönnyítheti, ha egy lapszámozott válasz egy adott típusbaT
deszerializálva van.PagedIterable
implementálja azIterable
interfészt, és egy API-t kínál a fogadáshozStream
, mígPagedFlux
egyFlux
. 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
, ésPagedFlux
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 Iterable
miatt 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 Iterable
miatt 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 PagedIterable
api-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.
Visszajelzés
https://aka.ms/ContentUserFeedback.
Hamarosan elérhető: 2024-ben fokozatosan kivezetjük a GitHub-problémákat a tartalom visszajelzési mechanizmusaként, és lecseréljük egy új visszajelzési rendszerre. További információ:Visszajelzés küldése és megtekintése a következőhöz: