Implementare una pipeline asincrona di elaborazione dati
Stai costruendo una dashboard di analytics che deve recuperare i dati utente e i log delle attività da servizi separati, quindi elaborarli per creare un riepilogo utente. Questa operazione deve essere eseguita in modo asincrono per mantenere l'applicazione reattiva. Il tuo compito è implementarla usando CompletableFuture.
Le classi UserData e UserSummary sono già state caricate per te.
Questo esercizio fa parte del corso
Ottimizzazione del codice in Java
Istruzioni dell'esercizio
- Aggiungi il recupero dei dati utente nel
CompletableFuture. - Aggiungi l'elaborazione dei dati utente nel
CompletableFuture. - Aggiungi la gestione delle eccezioni nel
CompletableFuture.
Esercizio pratico interattivo
Prova a risolvere questo esercizio completando il codice di esempio.
public class AsyncDashboard {
public static void main(String[] args) throws Exception {
CompletableFuture userSummaryFuture = CompletableFuture
// Fetch the user data
.____(() -> fetchUserData("user123"))
// Create summary based on fetched data
.____(userData -> createSummary(userData))
// Add exception handling
.____(ex -> new UserSummary(new UserData("error", "Error User")));
Thread.sleep(5000);
}
private static UserData fetchUserData(String userId) {
simulateNetworkLatency(300);
return new UserData(userId, "John Doe");
}
private static UserSummary createSummary(UserData userData) {
simulateNetworkLatency(200);
return new UserSummary(userData);
}
private static void simulateNetworkLatency(int millis) {
try { Thread.sleep(millis); } catch (InterruptedException e) {}
}
}