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.
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