Snippet1,我可以看到两个订阅者的sysout Snippet2,我看不到第二个观察者的输出 为什么合并对我不起作用?
Snippet1
x = createQ2Flowable().subscribeOn(Schedulers.computation())
.observeOn(Schedulers.io())
.filter(predicate -> !predicate.toString().contains("<log realm=\"\""))
.subscribe(onNext -> System.out.println("Q2->" + onNext));
y = createMetricsFlowable().subscribeOn(Schedulers.computation())
.observeOn(Schedulers.io())
.subscribe(onNext -> System.out.println("metrics->" + onNext));
Snippet2
createQ2Flowable().mergeWith(createMetricsFlowable())
.subscribeOn(Schedulers.computation())
.subscribe(onNext -> System.out.println(onNext));
[edit]:添加了可流动的创作者
private Flowable<String> createMetricsFlowable() {
return Flowable.create(source -> {
Space sp = SpaceFactory.getSpace("rxObservableFeeder");
while (running()) {
String line = (String) sp.in("RXTmFeeder");
source.onNext(line);
}
}, BackpressureStrategy.BUFFER);
}
private Flowable<String> createQ2Flowable() {
return Flowable.create(source -> {
Space sp = SpaceFactory.getSpace("LoggerSpace");
while (running()) {
LogEvent line = (LogEvent) sp.in("rxLoggingKey");
source.onNext(line.toString());
}
}, BackpressureStrategy.BUFFER);
}
答案 0 :(得分:1)
来自评论:
尝试
createQ2Flowable()
.subscribeOn(Schedulers.computation()) // <-------------------------
.mergeWith(createMetricsFlowable()
.subscribeOn(Schedulers.computation()) // <-------------------------
)
现在我需要知道它为什么会发生
鉴于详细的实现,您有两个同步Flowable
。合并它们时,第一个Flowable
订阅并立即开始发送,并且永远不会将控件返回给mergeWith
,因此第二个Flowable
永远不会订阅。
subscribeOn
之后的mergeWith
与上面提供的解决方案不同。您必须在后台线程上明确地同时Flowable
订阅,所以mergeWith
可以订阅第二个Flowable
之后,同步循环已从线程移出{{1}用于订阅其来源。