Mettre en place un pipeline de traitement de données asynchrone
Vous développez un tableau de bord d’analytique qui doit récupérer les données utilisateur et les journaux d’activité depuis des services distincts, puis les traiter pour créer un récapitulatif utilisateur. Cette opération doit être effectuée de manière asynchrone pour garder votre application réactive. Votre tâche est de l’implémenter avec CompletableFuture.
Les classes UserData et UserSummary ont été préchargées pour vous.
Cet exercice fait partie du cours
Optimiser son code en Java
Instructions
- Ajoutez la récupération des données utilisateur dans le
CompletableFuture. - Ajoutez le traitement des données utilisateur dans le
CompletableFuture. - Ajoutez la gestion des exceptions dans le
CompletableFuture.
Exercice interactif pratique
Essayez cet exercice en complétant cet exemple de code.
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) {}
}
}