Моя задача - создать два простых микросервиса для управления фильмами.Один из них отвечает за фильмы, а другой за обзоры.Я должен создать функцию для добавления отзывов (отзывы будут добавлены после утверждения).Для проверки просмотра фильма сервис должен позвонить в утверждающую (рецензирующую) службу асинхронно.Это мой самый первый раз с асинхронными методами, и я не уверен, как мне его создать.
Ниже приведен мой простой метод от сервиса фильмов до добавления обзора.
public boolean addReviewForMovie(Review review, String movieId){
Movie movie = movieRepository.findById(movieId);
if(movie == null){
return false;
}
review.setMovieId(movieId);
return reviewService.addReview(review);
}
Мой алгоритм одобрения очень прост - я хочу просто проверить пару параметров.Вот мой код.
public boolean addReview(Review review){
if (review.getReviewContent().length() < 10
|| review.getReviewContent().length() > 250) {
return false;
}else if(review.getRating()<1d || review.getRating() > 10d){
return false;
}else if(review.getUserName().length() < 1
|| review.getUserName().length() > 15){
return false;
}
review.setApproved(true);
reviewRepository.save(review);
return review.isApproved();
}
Не могли бы вы объяснить, как создавать эти методы асинхронно?Буду признателен, если вы отправите мне несколько статей об этом.
Я ссылаюсь на мой код, но я не уверен, что это правильный путь.Я ожидаю чего-то еще, я думаю.
Ниже мой метод в классе обслуживания фильма.Я использую это, чтобы добавить обзор.Этот метод должен запрашивать асинхронный метод.
public void addReviewForMovie(Review review){
CompletableFuture<Boolean> completableFuture = reviewService.addReview(review);
try {
Boolean result = completableFuture.get();
System.out.println(result);
} catch (InterruptedException | ExecutionException e) {
e.printStackTrace();
}
}
А вот мой метод утверждения
public CompletableFuture addReview(Review review){
CompletableFuture<Boolean> completableFuture = new CompletableFuture<>();
Executors.newCachedThreadPool().submit(()->{
try{
Thread.sleep(10000);
boolean addedFlag = true;
if (review.getReviewContent().length() < 10
|| review.getReviewContent().length() > 250) {
addedFlag = false;
completableFuture.complete(addedFlag);
}else {
review.setApproved(true);
reviewRepository.save(review);
completableFuture.complete(addedFlag);
}
} catch (Exception e){
e.printStackTrace();
}
return null;
});
return completableFuture;
Правильна ли реализация?Я думал, что идея заключается в том, что первый метод не будет ждать второго и отправит его обратно, как только addReview будет завершен.