Share via


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 de PagedIterable belirli bir türe Tseri durumdan çıkarılmış bir sayfalandırılmış yanıt üzerinde yineleme yaparak bu görevi kolaylaştırabilirsiniz. PagedIterable arabirimini Iterable uygular ve almak için bir StreamAPI sunarken PagedFlux bir Fluxsağ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 ve PagedFlux 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 PagedIterablesahip 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.