2016-11-10 7 views
1

一部の加入者が流動性のあるものを1つ購読し、この流動性のあるアイテムを加入者に送信すると、各加入者は異なる値を得ることができますか?例えば各加入者は、Flowableから異なる値を取得できますか?

、流動性が発する場合

0、1、2、3 ...

あるオブザーバー2,0取得し、他の観察者は次のように、ように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

関連する問題