我目前正在使用rx-java 2并且有一个用例,其中单个Camel Route订户需要使用多个Observable。 使用此解决方案作为参考,我有一个部分工作的解决方案。 RxJava - Merged Observable that accepts more Observables at any time?
我打算使用PublishProcessor<T>
订阅一个驼峰反应流订阅者,然后维护一个ConcurrentHashSet<Flowable<T>>
我可以动态添加新的Observable。
我目前仍然坚持如何使用PublishProcessor添加/管理Flowable<T>
个实例?
我是rx java的新手,所以对任何帮助表示赞赏!这就是我到目前为止所做的:
PublishProcessor<T> publishProcessor = PublishProcessor.create();
CamelReactiveStreamsService camelReactiveStreamsService =
CamelReactiveStreams.get(camelContext);
Subscriber<T> subscriber =
camelReactiveStreamsService.streamSubscriber("t-class",T.class);
}
Set<Flowable<T>> flowableSet = Collections.newSetFromMap(new ConcurrentHashMap<Flowable<T>, Boolean>());
public void add(Flowable<T> flowableOrder){
flowableSet.add(flowableOrder);
}
public void subscribe(){
publishProcessor.flatMap(x -> flowableSet.forEach(// TODO)
}) .subscribe(subscriber);
}
答案 0 :(得分:1)
您可以拥有一个Processor
并订阅多个可观察流。您需要在添加和删除observable时添加和删除订阅来管理订阅。
PublishProcessor<T> publishProcessor = PublishProcessor.create();
Map<Flowable<T>, Disposable> subscriptions = new ConcurrentHashMap<>();
void addObservable( Flowable<T> flowable ) {
subscriptions.computeIfAbsent( flowable, fkey ->
flowable.subscribe( publishProcessor ) );
}
void removeObservable( Flowable<T> flowable ) {
Disposable d = subscriptions.remove( flowable );
if ( d != null ) {
d.dispose();
}
}
void close() {
for ( Disposable d: subscriptions.values() ) {
d.dispose();
}
}
使用flowable作为地图的键,添加或删除订阅。