2016-11-10 2 views
1

Wenn einige Subskribenten einen Flowable abonnieren und diesen Flowable an Abonnenten ausgeben, kann jeder Abonnent einen anderen Wert bekommen?Kann jeder Teilnehmer unterschiedliche Werte von einem Flowable erhalten?

Zum Beispiel, wenn ein fließfähiges

emittiert

0, 1, 2, 3 ...

einen Beobachter bekommt 0, 2 und die anderen Beobachter 1 erhalten, 3 und so weiter, wie ein Lastenausgleicher.

Antwort

0

ParallelFlowable ist etwas näher an dem, was ich tun wollte. Es ist seit 2.0.5 verfügbar.

0

Wie wäre es mit dieser Lösung?

@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(); 
    } 

Der Ausgang:

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 

Problem ungelöst: Das kann nicht Auto Balance, für andere Antworten anhängig.

+0

Vielen Dank für Ihre Antwort. Mein Zweck ist, dass, wenn ein Abonnent Probleme mit dem Konsumieren hatte, der andere Abonnent automatisch Artikel bekam. Wenn ich beispielsweise Daten von Beobachter an Server über das Netzwerk senden möchte und ein Server heruntergefahren ist, kann der andere Beobachter die Daten stattdessen an den anderen Server senden. Ich frage mich nur, ob es schon die Lösung gab. Ich habe es nicht eilig. Also, wenn ich die Lösung gefunden habe, werde ich es teilen. – otal

Verwandte Themen