Идиоматический способ маршрутизации на основе контента с помощью RxJava

Кто-нибудь знает идиоматический способ сделать маршрутизацию на основе контента в RxJava или Reactive Ручей ?

Я вижу, как можно создать реактивный конвейер обработки сообщений, используя стандартный оператор, такой как фильтр карты и преобразование.

Но я не вижу ни одной идиоматики, зачем использовать операторы для переключения между несколькими возможными конвейерами.
Я хотел бы иметь возможность запускать один из многих конвейеров обработки на основе одного начального входного объекта или карты, чтобы в зависимости от содержимого для входной карты или объекта выбирается другой конвейер.

Идея заключается в том, что мне нужно сделать несколько возможных запросов к внешнему API, и то, что определяет запуск API и конвейера, зависит от объекта ввода для моего контроллера.

Я знаю, что это можно сделать с помощью интеграции Spring или Camel, но мой вариант использования не требует полной гибкости механизма интеграции, поскольку он может справиться с задержкой в ​​сети.

Спасибо, пожалуйста


person Luis Trigueiros    schedule 12.11.2016    source источник
comment
Вы имеете в виду "идиоматический способ"?   -  person Dave Moten    schedule 12.11.2016
comment
Извините идиоматически, я имею в виду использование одного встроенного оператора. Тх   -  person Luis Trigueiros    schedule 12.11.2016
comment
Да, я думал, вы имели в виду идиоматический способ, который в порядке, текст говорит «идиоматический почему».   -  person Dave Moten    schedule 12.11.2016


Ответы (2)


Маршрутизация на основе контента — это работа для flatMap:

observable.flatMap(x -> {
    if (isA(x))
        return observableA(x);
    else 
        return observableB(x);
});
person Dave Moten    schedule 12.11.2016

Также вы можете использовать оператор GroupBy, который позволяет вам отправлять разные группы элементов http://reactivex.io/documentation/operators/groupby.html

Вы можете увидеть несколько примеров groupBy здесь. https://github.com/politrons/reactive/blob/master/src/test/java/rx/observables/transforming/ObservableGroupBy.java

person paul    schedule 13.11.2016