Rxjava从每个线程接近最后一个Observable

时间:2018-04-19 06:07:55

标签: java rx-java

我正在考虑如何将RXJava用于下面描述的场景。

一个List<Object>,每个对象都会被发送到k8s并检查状态,直到respone返回true,所以我的轮询活动就是:

  private Observable<Boolean> startPolling(String content) {
    log.info("start polling "+ content);
    return Observable.interval(2, TimeUnit.SECONDS)
      .take(3)
      .observeOn(Schedulers.newThread())
      .flatMap(aLong -> Observable.just(new CheckSvcStatus().check(content)))
      .takeUntil(checkResult -> checkResult)
      .timeout(3000L, TimeUnit.MILLISECONDS, Observable.just(false))
      ;
  }

已发送行动的功能:

Observable<Compo> sentYamlAndGet() {
  log.info("sent yaml");
  sentYaml()
  return Observable.just(content);
}

我尝试使用foreach获取每个对象状态,如下所示:

  public void rxInstall() throws JsonProcessingException {
    List<Boolean>observables = Lists.newArrayList();
    Observable.from(list)
      .subscribeOn(Schedulers.newThread())
      .concatMap(s -> sendYamlAndGet())
      .timeout(3000l, TimeUnit.MILLISECONDS)
      .subscribe()
    ;

    Observable.from(list).forEach(s -> {
      observables.add(Observable.just(s)
        .flatMap(this::startPolling)
        .toBlocking()
        .last()
      )
      ;
    System.out.println(new ObjectMapper().writeValueAsString(observables));
  }

输出列表的对象是:{"o1","o2","o3","o4","o5"} 我想要的最后一个客观状态是:[false,true,false,false,true]

以上风格并不多'ReactX',检查对象状态动作互不影响。

如何投掷foreach?我试过toIterable()toList()但失败了。

  Observable.from(list)
  .concatMap(s -> sentYamlAndGet())
  .concatMap(this::startPolling)
  ....
  ;

想知道这样做是否是一种好习惯,最好的方法是什么?

提前致谢。

  

pps:currentlly我正在使用rxjava1 <version>1.2.0</version>但可以更改为2('▽`)ノ

0 个答案:

没有答案