非同期データ処理パイプラインの実装
あなたは、別々のサービスからユーザーデータとアクティビティログを取得し、それらを処理してユーザーサマリーを作成する分析ダッシュボードを構築しています。アプリケーションの応答性を保つため、この処理は非同期で実行する必要があります。今回は CompletableFuture を使ってこれを実装します。
UserData クラスと UserSummary クラスはあらかじめ読み込まれています。
この演習はコースの一部です
Java におけるコードの最適化
演習の手順
CompletableFutureにユーザーデータの取得処理を追加します。CompletableFutureにユーザーデータの処理を追加します。CompletableFutureに例外処理を追加します。
実践的なインタラクティブ演習
このサンプルコードを完成させて、この演習に挑戦してみましょう。
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) {}
}
}