Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Tento článek obsahuje přehled o tom, jak používat azure SDK pro stránkování a iterační funkce pro efektivní a produktivní práci s velkými datovými sadami.
Mnoho operací poskytovaných klientskými knihovnami v sadě Azure Java SDK vrací více než jeden výsledek. Sada Azure Java SDK v těchto případech definuje sadu přijatelných návratových typů, aby se zajistilo, že vývojářské prostředí je maximalizované prostřednictvím konzistence. Použité návratové typy jsou PagedIterable pro synchronizační rozhraní API a PagedFlux pro asynchronní rozhraní API. Rozhraní API se mírně liší v závislosti na různých případech použití, ale koncepčně mají stejné požadavky:
Umožňuje snadno iterovat jednotlivé prvky v kolekci jednotlivě a ignorovat potřebu ručního stránkování nebo sledování tokenů pokračování. Both
PagedIterableaPagedFluxusnadňují tento úkol iterováním přes stránkovanou odpověď deserializovanou do daného typuT.PagedIterableimplementuje rozhraníIterablea nabízí rozhraní API pro příjemStream, zatímcoPagedFluxposkytujeFlux. Ve všech případech je operace stránkování transparentní a iterace pokračuje, zatímco stále probíhá iterace výsledků.Umožňuje iterovat explicitně stránky po stránkách. Díky tomu můžete jasněji pochopit, kdy se požadavky provádějí, a získáte přístup k informacím o odpovědích na jednotlivé stránky. Obě
PagedIterableaPagedFluxmají metody, které vrátí vhodné typy pro iteraci podle stránky, nikoli podle jednotlivých prvků.
Tento článek je rozdělený na synchronní a asynchronní API rozhraní Java SDK. Synchronní iterační rozhraní API uvidíte při práci s synchronními klienty a asynchronní iterační rozhraní API při práci s asynchronními klienty.
Synchronní stránkování a iterace
Tato část popisuje synchronní rozhraní API.
Iterujte nad jednotlivými prvky
Jak bylo uvedeno, nejběžnějším případem použití je iterace přes každý prvek individuálně, místo iterace po stránkách. Následující příklady kódu ukazují, jak PagedIterable rozhraní API umožňuje používat iterační styl, kterému dáváte přednost při implementaci této funkce.
Použijte smyčku typu for-each
Vzhledem k tomu, že PagedIterable implementuje Iterable, můžete procházet prvky, jak je znázorněno v následujícím příkladu:
PagedIterable<Secret> secrets = client.listSecrets();
for (Secret secret : secrets) {
System.out.println("Secret is: " + secret);
}
Použijte stream
Protože PagedIterable má definovanou metodu stream() , můžete ji volat pomocí standardních tříd Java Stream APIs, jak je ukázáno v následujícím příkladu:
client.listSecrets()
.stream()
.forEach(secret -> System.out.println("Secret is: " + secret));
Použití iterátoru
Vzhledem k tomu PagedIterable , že implementuje Iterable, má také metodu iterator() , která umožňuje programovací styl iterátoru Java, jak je znázorněno v následujícím příkladu:
Iterator<Secret> secrets = client.listSecrets().iterator();
while (it.hasNext()) {
System.out.println("Secret is: " + it.next());
}
Iterace přes stránky
Při práci s jednotlivými stránkami můžete iterovat na stránce, například když potřebujete informace o odpovědi HTTP nebo když jsou pro zachování historie iterace důležité tokeny pokračování. Bez ohledu na to, jestli iterujete podle stránky nebo každé položky, není žádný rozdíl v výkonu ani počtu volání provedených službou. Základní implementace načte další stránku na vyžádání a pokud kdykoli zrušíte odběr PagedFlux, nedojde k žádným dalším voláním služby.
Použijte smyčku typu for-each
Když zavoláte listSecrets(), získáte PagedIterable, které má rozhraní API iterableByPage(). Toto rozhraní API vytvoří Iterable<PagedResponse<Secret>> namísto Iterable<Secret>.
PagedResponse poskytuje metadata odpovědi a přístup k tokenu pokračování, jak ukazuje následující příklad:
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))
}
Existuje také iterableByPage přetížení, které přijímá pokračovací token. Toto přetížení můžete použít, když se chcete později vrátit k témuž bodu iterace.
Použijte stream
Následující příklad ukazuje, jak streamByPage() metoda provádí stejnou operaci, jak je znázorněno výše. Toto rozhraní API má také přetížení v podobě pokračovacího tokenu, které umožňuje návrat do stejného bodu iterace v pozdější době.
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))
});
Asynchronně sledujte stránky a jednotlivé prvky.
Tato část se zabývá asynchronními rozhraními API. V asynchronních rozhraních API dochází k síťovým voláním v jiném vlákně než v hlavním vlákně, které volá subscribe(). To znamená, že hlavní vlákno může před dostupností výsledku ukončit. Je na vás, abyste zajistili, že se aplikace neukončí dříve, než bude mít asynchronní operace čas na dokončení.
Pozorovat jednotlivé prvky
Následující příklad ukazuje, jak PagedFlux rozhraní API umožňuje asynchronně sledovat jednotlivé prvky. Existují různé způsoby, jak se přihlásit k odběru typu Flux. Další informace najdete v tématu Jednoduché způsoby vytvoření fluxu nebo mono a přihlášení k odběru v referenční příručce Reactor 3. Tento příklad je jednou z různých variant, kde existují tři výrazy lambda, jeden pro příjemce, příjemce chyby a úplný příjemce. Mít všechny tři je dobrý postup, ale v některých případech je nutné mít pouze spotřebitele a případně i příjemce chyby.
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"));
Sledovat stránky
Následující příklad ukazuje, jak PagedFlux API umožňuje asynchronně sledovat jednotlivé stránky, opět prostřednictvím byPage() API, a to zajištěním příjemce, příjemce chyb a příjemce dokončení.
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"));
Další kroky
Teď, když už znáte stránkování a iteraci v sadě Azure SDK pro Javu, zvažte kontrolu dlouhotrvajících operací v sadě Azure SDK pro Javu. Dlouhotrvající operace jsou operace, které běží déle než většina běžných požadavků HTTP, obvykle proto, že vyžadují určité úsilí na straně serveru.