2016-11-10 53 views
1

当某些订阅者订阅一个流动账户并且这个流动账户向订户发送物品时,每个订户是否可以得到不同的值?每个用户可以从一个Flowable获得不同的值吗?

例如,如果可流动的发射

0,1,2,3 ...

一个观察者得到0,2和其他观察者得到1,3,等,像负载均衡器。

回答

0

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

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 

问题未解决:这不能自动平衡,对其他的答案悬而未决。

+0

谢谢你的回答。我的目的是,当一个用户遇到消费麻烦时,另一个用户自动获得物品。例如,当我想通过网络将观察者的数据发送到服务器,并且一个服务器发生故障时,另一个观察者可以将数据发送到另一个服务器。我只是想知道是否有解决方案。我不急。所以,当我找到解决方案时,我会分享它。 – otal

相关问题