每个订户可以从一个Flowable获得不同的值吗?

时间:2016-11-10 08:23:57

标签: rx-java rx-java2

当某些订阅者订阅了一个可流动且可流动的项目向订阅者发送时,每个订阅者可以获得不同的值吗?

例如,如果可流动的发射

0,1,2,3 ......

一个观察者得到0,2,另一个观察者得到1,3等等,就像负载均衡器一样。

2 个答案:

答案 0 :(得分:0)

这个解决方案怎么样?

  @Test
  public void testFlowableLoadBalancer() {
    IntStream stream = IntStream.iterate(1, i -> i + 1);
    Flowable<Integer> flowable = Flowable.create(e -> stream.forEach(i -> {
      try {
        Thread.sleep(1000);
      } catch (InterruptedException ignored) {
      }
      e.onNext(i);
    }), BackpressureStrategy.DROP);


    ConnectableFlowable<Integer> cf = flowable.publish();

    cf.filter(i -> i % 2 == 0).subscribe(i -> {
      logger.info("[even] i = {}" , i);
    });

    cf.filter(i -> i % 2 == 1).subscribe(i -> {
      logger.info("[ odd] i = {}" , i);
    });

    cf.connect();
  }

输出:

2016-11-11 18:15:57,884 INFO  data.Rx2Test - [ odd] i = 1
2016-11-11 18:15:58,892 INFO  data.Rx2Test - [even] i = 2
2016-11-11 18:15:59,895 INFO  data.Rx2Test - [ odd] i = 3
2016-11-11 18:16:00,900 INFO  data.Rx2Test - [even] i = 4

问题未解决:此问题无法自动平衡,等待其他答案。

答案 1 :(得分:0)

ParallelFlowable更接近我想要做的事情。 它自2.0.5起可用。