【发布时间】:2018-11-02 05:09:43
【问题描述】:
我的任务是为电影管理创建两个简单的微服务。其中一个负责电影,另一个负责评论。我必须创建添加评论的功能(评论将在批准后添加)。检查评论电影服务应该异步调用批准(评论)服务。这是我第一次使用异步方法,我不知道应该如何创建它。
以下是我从电影服务到添加评论的简单方法。
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 完成后将其发回。
【问题讨论】:
标签: java spring-mvc spring-boot asynchronous microservices