Java için Azure SDK'da sayfalandırma ve yineleme
Bu makalede, büyük veri kümeleriyle verimli ve üretken bir şekilde çalışmak üzere Java sayfalandırma ve yineleme işlevselliği için Azure SDK'nın nasıl kullanılacağına ilişkin genel bir bakış sağlanmaktadır.
Azure Java SDK'sı içindeki istemci kitaplıkları tarafından sağlanan birçok işlem birden fazla sonuç döndürür. Azure Java SDK'sı, tutarlılık aracılığıyla geliştirici deneyiminin en üst düzeye çıkarılmasını sağlamak için bu durumlarda kabul edilebilir bir dizi dönüş türü tanımlar. Kullanılan PagedIterable
dönüş türleri, eşitleme API'leri ve PagedFlux
zaman uyumsuz API'ler içindir. API'ler farklı kullanım örnekleri açısından biraz farklılık gösterir, ancak kavramsal olarak aynı gereksinimlere sahiptir:
El ile sayfalandırma veya devamlılık belirteçlerini izleme gereksinimini göz ardı ederek koleksiyondaki her öğe üzerinde ayrı ayrı kolayca yinelemeyi mümkün hale getirin.
PagedFlux
Hem hem dePagedIterable
belirli bir türeT
seri durumdan çıkarılmış bir sayfalandırılmış yanıt üzerinde yineleme yaparak bu görevi kolaylaştırabilirsiniz.PagedIterable
arabiriminiIterable
uygular ve almak için birStream
API sunarkenPagedFlux
birFlux
sağlar. Her durumda, sayfalandırma eylemi saydamdır ve yine sonuçlar yinelenirken yineleme devam eder.Açıkça sayfa sayfa yinelemeyi mümkün hale getirin. Bunu yapmak, istekler yapıldığında daha net bir şekilde anlamanıza ve sayfa başına yanıt bilgilerine erişmenize olanak tanır. Her ikisi
PagedIterable
de vePagedFlux
tek tek öğe yerine sayfaya göre yinelemek için uygun türler döndürecek yöntemlere sahiptir.
Bu makale, Java Azure SDK zaman uyumlu ve zaman uyumsuz API'ler arasında bölünmüştür. Zaman uyumlu istemcilerle çalışırken zaman uyumlu yineleme API'lerini ve zaman uyumsuz istemcilerle çalışırken zaman uyumsuz yineleme API'lerini görürsünüz.
Zaman uyumlu sayfalandırma ve yineleme
Bu bölüm zaman uyumlu API'leri kapsar.
Tek tek öğeler üzerinde yineleme
Belirtildiği gibi, en yaygın kullanım örneği sayfa başına değil, her öğeyi ayrı ayrı yinelemektir. Aşağıdaki kod örnekleri, API'nin PagedIterable
bu işlevi uygulamak için tercih ettiğiniz yineleme stilini kullanmanıza nasıl izin vereceğini gösterir.
Her döngü için bir döngü kullanma
PagedIterable
uyguladığındanIterable
, aşağıdaki örnekte gösterildiği gibi öğeleri yineleyebilirsiniz:
PagedIterable<Secret> secrets = client.listSecrets();
for (Secret secret : secrets) {
System.out.println("Secret is: " + secret);
}
Stream'i kullanma
Üzerinde tanımlanmış bir stream()
yöntem olduğundanPagedIterable
, aşağıdaki örnekte gösterildiği gibi standart Java Stream API'lerini kullanmak için çağırabilirsiniz:
client.listSecrets()
.stream()
.forEach(secret -> System.out.println("Secret is: " + secret));
Yineleyici kullanma
PagedIterable
uyguladığındanIterable
, aşağıdaki örnekte gösterildiği gibi Java yineleyici programlama stiline izin veren bir iterator()
yöntemi de vardır:
Iterator<Secret> secrets = client.listSecrets().iterator();
while (it.hasNext()) {
System.out.println("Secret is: " + it.next());
}
Sayfalar üzerinde yineleme
Tek tek sayfalarla çalışırken, örneğin HTTP yanıt bilgilerine ihtiyacınız olduğunda veya yineleme geçmişini korumak için devamlılık belirteçlerinin önemli olduğu durumlarda sayfa başına yineleme yapabilirsiniz. Sayfaya veya her öğeye göre yinelemeden bağımsız olarak, performansta veya hizmete yapılan çağrıların sayısında bir fark yoktur. Temel alınan uygulama bir sonraki sayfayı isteğe bağlı olarak yükler ve aboneliğini istediğiniz zaman kaldırırsanız PagedFlux
hizmete başka çağrı yapılmaz.
Her döngü için bir döngü kullanma
çağrısı listSecrets()
yaptığınızda, API'ye PagedIterable
sahip olan bir iterableByPage()
alırsınız. Bu API, yerine bir Iterable<PagedResponse<Secret>>
Iterable<Secret>
üretir. PagedResponse
aşağıdaki örnekte gösterildiği gibi yanıt meta verilerini ve devamlılık belirtecine erişimi sağlar:
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))
}
Ayrıca devamlılık iterableByPage
belirtecini kabul eden bir aşırı yükleme de vardır. Daha sonra aynı yineleme noktasına dönmek istediğinizde bu aşırı yüklemeyi çağırabilirsiniz.
Stream'i kullanma
Aşağıdaki örnekte yöntemin streamByPage()
yukarıda gösterildiği gibi aynı işlemi nasıl gerçekleştirdiği gösterilmektedir. Bu API ayrıca daha sonra aynı yineleme noktasına dönmek için bir devamlılık belirteci aşırı yüklemesine sahiptir.
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))
});
Sayfaları ve tek tek öğeleri zaman uyumsuz olarak gözlemleme
Bu bölüm zaman uyumsuz API'leri kapsar. Zaman uyumsuz API'lerde, ağ çağrıları çağıran subscribe()
ana iş parçacığından farklı bir iş parçacığında gerçekleşir. Bunun anlamı, ana iş parçacığının sonuç kullanılabilir olmadan önce sonlandırılabilmesidir. Zaman uyumsuz işlem tamamlanmadan önce uygulamanın çıkmadığından emin olmak size bağlıdır.
Tek tek öğeleri gözlemleme
Aşağıdaki örnekte, API'nin PagedFlux
tek tek öğeleri zaman uyumsuz olarak gözlemlemenize nasıl olanak tanıyan bir örnek gösterilmektedir. Flux türüne abone olmanın çeşitli yolları vardır. Daha fazla bilgi için Reactor 3 Başvuru Kılavuzu'nda Akı veya Mono Oluşturmanın Basit Yolları ve Buna Abone Olma bölümüne bakın. Bu örnek, her biri tüketici, hata tüketicisi ve tam tüketici için birer tane olan üç lambda ifadesinin bulunduğu bir çeşittir. Üçüne de sahip olmak iyi bir uygulamadır, ancak bazı durumlarda yalnızca tüketicinin ve muhtemelen hata tüketicisinin olması gerekir.
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"));
Sayfaları gözlemleme
Aşağıdaki örnekte, API'nin PagedFlux
bir API kullanarak ve tüketici byPage()
, hata tüketicisi ve tamamlama tüketicisi sağlayarak her sayfayı zaman uyumsuz olarak gözlemlemenize nasıl olanak sağladığı gösterilmektedir.
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"));
Sonraki adımlar
Java için Azure SDK'da sayfalandırma ve yineleme hakkında bilgi edindiğinize göre, Java için Azure SDK'da uzun süre çalışan işlemleri gözden geçirmeyi göz önünde bulundurun. Uzun süre çalışan işlemler, genellikle sunucu tarafında biraz çaba gerektirdiğinden çoğu normal HTTP isteğinden daha uzun süre çalışan işlemlerdir.