RxJava 2也许不会产生输出

时间:2018-05-17 22:09:39

标签: java rx-java2

我有一个消费者和多个生产者 - 在消费者试图执行一些昂贵的操作之前,需要对记录进行批处理。

这是我尝试使用RxJava窗口实现上述功能并减少函数:

import io.reactivex.Maybe;
import io.reactivex.Observable;
import io.reactivex.subjects.PublishSubject;
import java.util.concurrent.TimeUnit;
import java.util.stream.IntStream;

public class Rxtest {
  private PublishSubject<String> bus = PublishSubject.create();
  private Maybe<Observable<String>> maybe;

  public Rxtest() {
    maybe = bus
        .window(10, TimeUnit.SECONDS, 10)
        .reduce( (fObs, sObs) -> fObs.zipWith(sObs, (f, s) -> f + s));

    maybe.subscribe(obs -> obs.subscribe(System.out::println, Throwable::printStackTrace,
        () -> System.out.println("Done here")));
  }

  public static void main(String[] args) throws InterruptedException {
    Rxtest test = new Rxtest();
    Stream.iterate(0, i -> i+1)
        .forEach(i -> {
          test.bus.onNext(String.valueOf(i));
          return;
        });
    Thread.sleep(100000L);
  }
}

我预期的输出:

12345678910
11121314151617181920

....
....
Done here

相反,我一无所获。

1 个答案:

答案 0 :(得分:2)

以下内容将批量处理10秒的请求并进行处理。

observable
  .buffer( 10, TimeUnit.SECONDS )
  .subscribe( listOfString -> process( listOfString ) );

这将批量处理10秒或100件物品并处理它们:

observable
  .buffer( 10, TimeUnit.SECONDS, 100 )
  .subscribe( listOfString -> process( listOfString ) );

如果这两个案例没有涵盖,你真的不清楚你想要什么。