Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Bu makalede, Java için Azure SDK ile uzun süre çalışan işlemleri kullanmaya genel bir bakış sağlanır.
Azure'da belirli işlemlerin tamamlanması uzun sürebilir. Bu işlemler, hızlı istek/yanıt akışının standart HTTP stilinin dışındadır. Örneğin, bir kaynak URL'den Depolama blob'una veri kopyalamak veya formları tanımak için modeli eğitmek, birkaç saniye ila birkaç dakika sürebilecek işlemlerdir. Bu tür işlemler Long-Running İşlemleri olarak adlandırılır ve genellikle 'LRO' olarak kısaltılır. LRO'ların tamamlanması istenen işleme ve sunucu tarafında gerçekleştirilmesi gereken işleme bağlı olarak saniye, dakika, saat, gün veya daha uzun sürebilir.
Azure için Java istemci kitaplıklarında, uzun süre çalışan tüm işlemlerin ön ekiyle begin başladığı bir kural vardır. Bu ön ek, bu işlemin uzun süre çalıştığını ve bu işlemle etkileşim araçlarının normal istek/yanıt akışından biraz farklı olduğunu gösterir. Ön ekin begin yanı sıra, uzun süre çalışan işlem işlevselliğinin tamamını etkinleştirmek için işlemden dönüş türü de normalden farklıdır. Java için Azure SDK'da olduğu gibi, uzun süre çalışan işlemler için hem zaman uyumlu hem de zaman uyumsuz API'ler vardır:
- Zaman uyumlu istemcilerde, uzun süre çalışan işlemler bir
SyncPollerörnek döndürür. - Zaman uyumsuz istemcilerde, uzun süreli işlemler bir
PollerFluxnesnesi döndürür.
Hem SyncPoller hem de PollerFlux, uzun süre çalışan sunucu tarafı işlemleriyle etkileşimi basitleştirmeye yönelik istemci tarafı soyutlamalarıdır. Bu makalenin geri kalanında bu türlerle çalışırken en iyi yöntemler özetlenmiştir.
Eşzamanlı uzun süre çalışan işlemler
Bir SyncPoller döndüren herhangi bir API'yi çağırmak, hemen uzun süre çalışacak işlemi başlatır. API SyncPoller’yü hemen döndürerek, uzun süre çalışan işlemin ilerleme durumunu izlemenize ve nihai sonucu almanıza olanak tanır. Aşağıdaki örnek, SyncPoller kullanarak uzun süre çalışan bir işlemin ilerlemesinin nasıl izleneceğini göstermektedir.
SyncPoller<UploadBlobProgress, UploadedBlobProperties> poller = syncClient.beginUploadFromUri(<URI to upload from>)
PollResponse<UploadBlobProgress> response;
do {
response = poller.poll();
System.out.println("Status of long running upload operation: " + response.getStatus());
Duration pollInterval = response.getRetryAfter();
TimeUnit.MILLISECONDS.sleep(pollInterval.toMillis());
} while (!response.getStatus().isComplete());
Bu örnekte, uzun süre çalışan işlemin ilerleme durumu hakkında bilgi almak için poll() üzerindeki SyncPoller yöntemi kullanılır. Bu kod durumu konsola yazdırır, ancak daha iyi bir uygulama bu duruma göre ilgili kararlar alır.
yöntemi, getRetryAfter() bir sonraki yoklamadan önce ne kadar bekleyeceğiniz hakkında bilgi döndürür. Azure'da uzun süre çalışan işlemlerin çoğu, HTTP yanıtlarının bir parçası olarak (yaygın olarak kullanılan retry-after üst bilgisi) yoklama gecikme süresini döndürür. Yanıt yoklama gecikmesini içermiyorsa, getRetryAfter() yöntem uzun süre çalışan işlemi çağırma sırasında verilen süreyi döndürür.
Yukarıdaki örnek, uzun süre çalışan işlem tamamlanana kadar sürekli yoklama yapmak için bir do..while döngü kullanır. İlginizi bu ara sonuçlar çekmiyorsa, yerine waitForCompletion() çağırabilirsiniz. Bu çağrı, uzun süre çalışan işlem tamamlanana ve son yoklama yanıtını döndürene kadar geçerli iş parçacığını engeller:
PollResponse<UploadBlobProgress> response = poller.waitForCompletion();
Son anket yanıtı, uzun süreli işlemin başarıyla tamamlandığını gösteriyorsa, getFinalResult() kullanarak nihai sonucu alabilirsiniz.
if (LongRunningOperationStatus.SUCCESSFULLY_COMPLETED == response.getStatus()) {
UploadedBlobProperties result = poller.getFinalResult();
}
içindeki diğer yararlı API'ler SyncPoller şunlardır:
-
waitForCompletion(Duration): uzun süren işlemin verilen zaman aşımı süresi içinde tamamlanmasını bekleyin. -
waitUntil(LongRunningOperationStatus): verilen uzun süre çalışan işlem durumu alınana kadar bekleyin. -
waitUntil(LongRunningOperationStatus, Duration): verilen uzun süre çalışan işlem durumu alınana kadar veya belirtilen zaman aşımı süresi dolana kadar bekleyin.
Zaman uyumsuz uzun süre çalışan işlemler
Aşağıdaki örnekte, PollerFlux nesnesinin uzun süre çalışan bir işlemi nasıl gözlemlemenizi sağladığı gösterilmektedir. Asenkron API'lerde, ağ çağrıları ana iş parçacığını çağıran subscribe() 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.
Zaman uyumsuz API hemen bir PollerFlux döndürür, ancak uzun süre çalışan işlemin kendisi siz PollerFlux'e abone olana kadar başlatılmaz. Bu işlem, tüm Fluxtabanlı API'lerin nasıl çalıştığıdır. Aşağıdaki örnekte, zaman uyumsuz uzun süre çalışan bir işlem gösterilmektedir:
asyncClient.beginUploadFromUri(...)
.subscribe(response -> System.out.println("Status of long running upload operation: " + response.getStatus()));
Aşağıdaki örnekte, uzun süre çalışan işlemde aralıklı durum güncelleştirmeleri alacaksınız. Uzun süre çalışan işlemin hala beklenen şekilde çalışıp çalışmadığını belirlemek için bu güncelleştirmeleri kullanabilirsiniz. Bu örnek durumu konsola yazdırır, ancak daha iyi bir uygulama bu duruma göre ilgili hata işleme kararları alır.
Ara durum güncelleştirmeleriyle ilgilenmiyorsanız ve yalnızca son sonuç geldiğinde bildirim almak istiyorsanız, aşağıdaki örneğe benzer bir kod kullanabilirsiniz:
asyncClient.beginUploadFromUri(...)
.last()
.flatMap(response -> {
if (LongRunningOperationStatus.SUCCESSFULLY_COMPLETED == response.getStatus()) {
return response.getFinalResult();
}
return Mono.error(new IllegalStateException("Polling completed unsuccessfully with status: "+ response.getStatus()));
})
.subscribe(
finalResult -> processFormPages(finalResult),
ex -> countDownLatch.countDown(),
() -> countDownLatch.countDown());
Bu kodda, çağrısı last()yaparak uzun süre çalışan işlemin nihai sonucunu alırsınız. Bu çağrı, tüm yoklamanın tamamlanmasını beklemek istediğinizi bildirir PollerFlux . Bu noktada uzun süre çalışan işlem terminal durumuna ulaşmıştır ve sonucu belirlemek için durumunu inceleyebilirsiniz. Sorgulayıcı, uzun süre çalışan işlemin başarıyla tamamlandığını belirtiyorsa, nihai sonucu alabilir ve subscribe çağrısında tüketiciye iletebilirsiniz.
Sonraki Adımlar
Java için Azure SDK'daki uzun süre çalışan API'leri öğrendiğinize göre HTTP istemcisini özelleştirmeyi daha fazla öğrenmek için bkz. Java için Azure SDK'da proxy'leri yapılandırma.