将Spring异步重构为RxJava方式

时间:2017-04-05 10:49:05

标签: java spring asynchronous rx-java

我是RxJava的新手,我有一个目前使用Spring Async的项目,尝试将其重构为RxJava方式,不知道什么是优雅的方式。

我们有一个UserService类,可以完成繁重的工作

@Async
public class UserService {
  public Future<User> fetchUsers(String space, String username) {
    // some other thing
    ...

    // call network APIs to fetch users for a space
    return new AsyncResult<>(clientOf.fetechUsers(space, username));
  }
}

然后在来电者中:

List<Future<User>> users = new ArrayList<>();
String username = "alice";
for(String space : Arrays.asList("SPACE1", "SPACE2")) {
  users.add(userService.fetchUsers(space, username));
}

List<User> resultUsers = new ArrayList<>();
for(Future<User> user: users) {
  resultUsers.add(user.get());
}
return resultUsers;

在调用者中,我们想要并行调用两个空格的userService,然后合并结果,我应该如何使用RxJava完成它?我看到了Tread的一些例子,我是否必须自己管理Tread?还是有一种优雅的方式来完成工作?

1 个答案:

答案 0 :(得分:0)

阅读更多我发现RxJava 2我意识到我可以做以下事情:

Observable.just("SPACE1", "SPACE2")
          .observeOn(Schedulers.io())
          .map(space -> userService.fetchUsers(space, username))
          .blockingSubscribe(System.out::println);