我是响应式编程(Spring webflux)的新手,想知道如何最好地处理这个用例。我有一个返回 Mono 的反应式服务调用 ( getAccount ),我想将它与另一个返回Mono<Set>的服务调用getBooks和一个执行某种转换并返回类似Mono<Set>的最终同步调用转换链接起来。当getAccount或getBooks返回空时记录警告时,我会以Mono<Set>的形式链接并返回转换后的数据吗?这是我试图做的一个简化版本的例子。
鉴于这里有一些虚假服务
public static Mono<String> getAccount(String name){
return Mono.just(name);
}
public static Mono<Set<Book> getBooks(String title){
return Mono.just(Sets.newHashSet(new Book(title + "One", "Author One"),
new Book(title +"Two", "Author Two"),
new Book(title + "Three", "Author Three")));
}
public static LibraryBook transform (Book a){
return new LibraryBook(a.getTitle(), a.getAuthorName(), "someUniqueId");
}
我想获取给定用户的帐户并找到他/她借的所有书籍并转换书籍并将值作为 Mono<Set> 返回值,同时在适当的地方记录警告
这是我的开始
public Mono<Set<LibraryBook>> getBorrowedBooks(String userId) {
return getAccount(userId)
.flatMap(account -> getBooks(account))
.log()
.map(books -> books.stream().map(book -> transform(book)).collect(Collectors.toSet()))
}
但是,我不确定混合响应式和流式是否是一件坏事,而且它看起来不正确。