Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Dieser Artikel enthält eine Übersicht über die Verwendung des Azure SDK für Java-Paginierungs- und Iterationsfunktionen, um effizient und produktiv mit großen Datasets zu arbeiten.
Viele Vorgänge, die von den Clientbibliotheken im Azure Java SDK bereitgestellt werden, geben mehr als ein Ergebnis zurück. Das Azure Java SDK definiert eine Reihe akzeptabler Rückgabetypen in diesen Fällen, um sicherzustellen, dass die Entwicklererfahrung durch Konsistenz maximiert wird. Die verwendeten Rückgabetypen sind PagedIterable
für synchrone APIs und PagedFlux
für asynchrone APIs. Die APIs unterscheiden sich geringfügig unter Berücksichtigung ihrer unterschiedlichen Anwendungsfälle, aber konzeptionell weisen sie die gleichen Anforderungen auf:
Ermöglichen der einfachen Iteration über jedes einzelne Element in der Sammlung, wobei jegliche Erfordernis von manueller Paginierung oder Nachverfolgung von Fortsetzungstoken ignoriert wird. Sowohl
PagedIterable
als auchPagedFlux
erleichtern diese Aufgabe, indem die Iteration über eine paginierte Antwort erfolgt, die in den angegebenen TypT
deserialisiert wurde.PagedIterable
implementiert dieIterable
Schnittstelle und stellt eine API bereit, um eineStream
zu empfangen, währendPagedFlux
eineFlux
bereitstellt. In allen Fällen ist der Vorgang der Paginierung transparent, und die Iteration wird fortgesetzt, während noch Ergebnisse vorhanden sind, die noch iteriert werden müssen.Ermöglichen der explizit seitenweisen Iteration. Auf diese Weise können Sie besser verstehen, wenn Anforderungen gestellt werden, und Sie können auf Seitenantwortinformationen zugreifen. Sowohl
PagedIterable
als auchPagedFlux
besitzen Methoden, die Typen zurückgeben, die für die seitenweise Iteration geeignet sind, anstatt über einzelne Elemente.
Dieser Artikel wird zwischen synchronen und asynchronen Java Azure SDK-APIs aufgeteilt. Sie sehen die synchronen Iterations-APIs, wenn Sie mit synchronen Clients arbeiten, und asynchrone Iterations-APIs, wenn Sie mit asynchronen Clients arbeiten.
Synchrone Paginierung und Iteration
In diesem Abschnitt werden die synchronen APIs behandelt.
Über einzelne Elemente iterieren
Wie bereits erwähnt, besteht der am häufigsten verwendete Anwendungsfall darin, jedes Element einzeln und nicht pro Seite zu durchlaufen. Die folgenden Codebeispiele zeigen, wie Sie mit der PagedIterable
API den Iterationsstil verwenden können, den Sie bevorzugen, um diese Funktionalität zu implementieren.
Verwenden einer „For Each“-Schleife
Da PagedIterable
Iterable
implementiert, können Sie die Elemente durchlaufen, wie im folgenden Beispiel gezeigt wird:
PagedIterable<Secret> secrets = client.listSecrets();
for (Secret secret : secrets) {
System.out.println("Secret is: " + secret);
}
Stream verwenden
Da auf PagedIterable
eine stream()
Methode definiert ist, können Sie diese aufrufen, um die Standard-Java-Stream-APIs zu verwenden, wie im folgenden Beispiel gezeigt wird:
client.listSecrets()
.stream()
.forEach(secret -> System.out.println("Secret is: " + secret));
Iterator verwenden
Da PagedIterable
Iterable
implementiert, verfügt es auch über eine iterator()
Methode, die den Java-Iterator-Programmierstil zulässt, im folgenden Beispiel gezeigt:
Iterator<Secret> secrets = client.listSecrets().iterator();
while (it.hasNext()) {
System.out.println("Secret is: " + it.next());
}
Iterieren über Seiten
Wenn Sie mit einzelnen Seiten arbeiten, können Sie pro Seite iterieren, z. B. wenn Sie HTTP-Antwortinformationen benötigen oder wenn Fortsetzungstoken wichtig sind, um den Iterationsverlauf beizubehalten. Unabhängig davon, ob Sie seitenweise oder pro Element iterieren, gibt es keinen Unterschied in der Leistung oder der Anzahl der Aufrufe, die an den Dienst getätigt werden. Die zugrunde liegende Implementierung lädt die nächste Seite bei Bedarf, und wenn Sie sich jederzeit von PagedFlux
abmelden, gibt es keine weiteren Aufrufe an den Dienst.
Verwenden einer „For Each“-Schleife
Wenn Sie listSecrets()
aufrufen, erhalten Sie eine PagedIterable
, die über eine iterableByPage()
API verfügt. Diese API erzeugt ein Iterable<PagedResponse<Secret>>
anstelle von einem Iterable<Secret>
. Die PagedResponse
stellt die Antwortmetadaten und den Zugriff auf das Fortsetzungstoken bereit, wie im folgenden Beispiel gezeigt:
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))
}
Außerdem gibt es eine iterableByPage
-Überladung, die ein Fortsetzungstoken akzeptiert. Sie können diese Überladung aufrufen, wenn Sie zu einem späteren Zeitpunkt zum gleichen Iterationspunkt zurückkehren möchten.
Stream verwenden
Das folgende Beispiel zeigt, wie die streamByPage()
Methode denselben Vorgang wie oben gezeigt ausführt. Diese API verfügt auch über eine Fortsetzungstokenüberladung, um zu einem späteren Zeitpunkt an den gleichen Iterationspunkt zurückzukehren.
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))
});
Asynchrones Beobachten von Seiten und einzelnen Elementen
In diesem Abschnitt werden die asynchronen APIs behandelt. In asynchronen APIs erfolgen die Netzwerkaufrufe in einem anderen Thread als im Hauptthread, der subscribe()
aufruft. Dies bedeutet, dass der Hauptthread beendet werden kann, bevor das Ergebnis verfügbar ist. Es liegt an Ihnen, sicherzustellen, dass die Anwendung nicht beendet wird, bevor der asynchrone Vorgang abgeschlossen wurde.
Beobachten einzelner Elemente
Das folgende Beispiel zeigt, wie Sie mit der PagedFlux
API einzelne Elemente asynchron beobachten können. Es gibt verschiedene Möglichkeiten, einen Flux-Typ zu abonnieren. Weitere Informationen finden Sie unter Einfache Möglichkeiten, einen Flux oder ein Mono zu erstellen und zu abonnieren im Referenzhandbuch zu Reaktor 3. Dieses Beispiel ist eine Art, bei der es drei Lambda-Ausdrücke gibt, jeweils einen für den Verbraucher, den Fehlerverbraucher und den vollständigen Verbraucher. Es ist bewährte Praxis, alle drei zu verwenden, doch in manchen Fällen ist es nur notwendig, den Consumer und vielleicht noch den Fehlerconsumer zu verwenden.
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"));
Seiten beobachten
Das folgende Beispiel zeigt, wie Sie mit der PagedFlux
-API jede Seite asynchron beobachten können, wiederum durch Verwendung einer byPage()
-API und durch Bereitstellen eines Consumers, Fehlerconsumers und Abschlussconsumers.
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"));
Nächste Schritte
Nachdem Sie nun mit Paginierung und Iteration im Azure SDK für Java vertraut sind, sollten Sie die Überprüfung von Vorgängen mit langer Ausführung im Azure SDK für Java in Betracht ziehen. Vorgänge mit langer Ausführung sind Vorgänge, die länger als die meisten normalen HTTP-Anforderungen ausgeführt werden, in der Regel, da sie auf der Serverseite einige Anstrengungen erfordern.