Hata İşleme ve Eşzamansız HTTP İş Akışı
Hataları exceptionally, handle ve whenComplete ile yönetin; ardından eşzamansız bir HTTP istemcisi iş akışı oluşturun.
Hata İşleme ve Eşzamansız HTTP İş Akışı, CoddyKit'te ücretsiz bir Java Academy dersidir. Bu, 4 dersinin 4. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Java Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Java Academy kursu toplamda 4 dersten oluşur.
Eşzamansız Hata Yönetimi Neden Önemlidir?
Eşzamansız işlem hatlarında istisnalar, eşzamanlı koddakiyle aynı şekilde yayılmaz. Hataları exceptionally, handle veya whenComplete kullanarak açıkça yönetmelisiniz.
exceptionally: Hatalardan Kurtarma
exceptionally(Function<Throwable, T>) yalnızca gelecek bir istisnayla tamamlanırsa çağrılır. İşlem hattını çalışır durumda tutarak yedek bir değer sağlar.
CompletableFuture<String> safe = fetchUser(id)
.thenApply(User::getName)
.exceptionally(ex -> {
log.warn("Fetch failed: " + ex.getMessage());
return "Anonymous";
});
System.out.println(safe.join()); // "Anonymous" if fetch failedhandle: Başarıyı ve Hatayı Dönüştürme
handle(BiFunction<T, Throwable, U>) hem başarıda hem de hatada çağrılır. İki bağımsız değişkenden biri null olur.
fetchUser(id).handle((user, ex) -> {
if (ex != null) return UserDto.empty();
return UserDto.from(user);
}).thenAccept(dto -> sendResponse(dto));whenComplete: Her Sonuçtan Sonra Yan Etki
whenComplete(BiConsumer), sonuç ne olursa olsun tamamlanmadan sonra çağrılır. Sonucu değiştirmez — günlükleme, ölçümler veya temizleme işlemleri için kullanın.
fetchUser(id)
.whenComplete((user, ex) -> {
if (ex != null) metrics.increment("user.fetch.error");
else metrics.increment("user.fetch.success");
})
.thenAccept(u -> sendResponse(u));Başarısız Gelecekleri Yeniden Deneme
Yeniden deneme mantığını, hata durumunda işlemi maksimum deneme sayısına ulaşana kadar özyinelemeli olarak çağırarak uygulayın.
CompletableFuture<String> withRetry(Supplier<CompletableFuture<String>> task, int retries) {
return task.get().exceptionallyCompose(ex -> {
if (retries > 0) {
System.out.println("Retrying... " + retries);
return withRetry(task, retries - 1);
}
return CompletableFuture.failedFuture(ex);
});
}Java 11 HttpClient: Asenkron GET
Java 11'in HttpClient'ı, sendAsync() üzerinden tamamen asenkron HTTP iletişimi sağlar ve bir CompletableFuture<HttpResponse<String>> döndürür.
HttpClient client = HttpClient.newHttpClient();
HttpRequest req = HttpRequest.newBuilder()
.uri(URI.create("https://api.example.com/users/1"))
.build();
CompletableFuture<String> body = client
.sendAsync(req, HttpResponse.BodyHandlers.ofString())
.thenApply(HttpResponse::body);Birden Çok HTTP Çağrısını Zincirleme
Bağımlı HTTP çağrılarını zincirlemek için thenCompose kullanın: önce kullanıcıyı getirin, ardından kullanıcının ID değerini kullanarak siparişlerini getirin.
client.sendAsync(userReq, HttpResponse.BodyHandlers.ofString())
.thenApply(r -> parseUser(r.body()))
.thenCompose(user -> client.sendAsync(
buildOrdersRequest(user.getId()),
HttpResponse.BodyHandlers.ofString()))
.thenApply(r -> parseOrders(r.body()))
.thenAccept(orders -> System.out.println("Orders: " + orders.size()));allOf ile Paralel HTTP Çağrıları
Birkaç uç noktaya paralel olarak istek gönderin, ardından tümü tamamlandığında bütün yanıtları toplayın.
List<URI> endpoints = List.of(uri1, uri2, uri3);
List<CompletableFuture<String>> requests = endpoints.stream()
.map(uri -> client.sendAsync(
HttpRequest.newBuilder(uri).build(),
HttpResponse.BodyHandlers.ofString())
.thenApply(HttpResponse::body))
.collect(Collectors.toList());
List<String> responses = CompletableFuture
.allOf(requests.toArray(new CompletableFuture[0]))
.thenApply(v -> requests.stream().map(CompletableFuture::join).collect(Collectors.toList()))
.join();HTTP Çağrılarında Zaman Aşımı
Sunucunun yanıt vermesi çok uzun sürerse çağrıyı iptal etmek için orTimeout'u doğrudan asenkron HTTP çağrısına uygulayın.
CompletableFuture<String> result = client
.sendAsync(req, HttpResponse.BodyHandlers.ofString())
.orTimeout(5, TimeUnit.SECONDS)
.thenApply(HttpResponse::body)
.exceptionally(ex -> "timeout or error");İşlem Hattında Durum Kodu Doğrulama
HTTP durum kodunu kontrol etmek ve hata gösteriyorsa alana özgü bir istisna fırlatmak için thenApply kullanın; böylece işlem hattının hata işleme davranışı tutarlı kalır.
.thenApply(response -> {
if (response.statusCode() != 200)
throw new HttpResponseException(response.statusCode());
return response.body();
})Hata Kurtarma ile Günlüklemeyi Birleştirme
Aynı işlem hattında günlükleme için whenComplete'i, kurtarma için de exceptionally'yi katmanlayın — bunlar sorunsuz biçimde birleştirilir.
fetchData()
.whenComplete((r, ex) -> { if (ex != null) log.error("Failed", ex); })
.exceptionally(ex -> fallback())
.thenAccept(result -> process(result));Kısa Kontrol
Hangi CompletableFuture metodu ONLY gelecek başarısız olduğunda çağrılır?
Özet
Yedek değerler için exceptionally'yi, her iki sonucu dönüştürmek için handle'ı, yan etkiler için whenComplete'i kullanın. Java 11 HttpClient + thenCompose + allOf ile asenkron HTTP işlem hatları oluşturun.
Sıkça Sorulan Sorular
“Hata İşleme ve Eşzamansız HTTP İş Akışı” dersi ücretsiz mi?
Evet — “Hata İşleme ve Eşzamansız HTTP İş Akışı” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Java Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Java Academy kursu toplamda 4 dersten oluşur.
“Hata İşleme ve Eşzamansız HTTP İş Akışı” dersinde ne öğreneceğim?
Hataları exceptionally, handle ve whenComplete ile yönetin; ardından eşzamansız bir HTTP istemcisi iş akışı oluşturun. Java Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
Java Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te Java Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 4. dersidir.
“Hata İşleme ve Eşzamansız HTTP İş Akışı” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu Java Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her Java Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- CompletableFutures Oluşturma ve Tamamlama
- thenApply ve thenCompose ile Zincirleme
- Gelecekleri Birleştirme: allOf ve anyOf
- Hata İşleme ve Eşzamansız HTTP İş Akışı