当某些订阅者订阅了一个可流动且可流动的项目向订阅者发送时,每个订阅者可以获得不同的值吗?
例如,如果可流动的发射
0,1,2,3 ......
一个观察者得到0,2,另一个观察者得到1,3等等,就像负载均衡器一样。
答案 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起可用。