Rx java 如何避免为RxJava中的每个getFlowable()调用创建新的观察者链?

Rx java 如何避免为RxJava中的每个getFlowable()调用创建新的观察者链?,rx-java,reactive-programming,rx-java2,Rx Java,Reactive Programming,Rx Java2,我有以下课程: public class Service { private Observable<Long> obs = Observable.interval(0, 10, TimeUnit.SECONDS); private Single<Foo> sendFooRequest() { return Single.fromCallable(() -> sendHttpRequest()); } public

我有以下课程:

public class Service {

    private Observable<Long> obs = Observable.interval(0, 10, TimeUnit.SECONDS);

    private Single<Foo> sendFooRequest() {
        return Single.fromCallable(() -> sendHttpRequest());
    }

    public Flowable<Foo> getFlowable() {
        return obs
                .toFlowable(BackpressureStrategy.BUFFER)
                .doOnNext(tick -> log.info("tick: {}", tick))
                .flatMapSingle(tick -> sendFooRequest())
                .distinctUntilChanged();
    }
}

看起来您正在寻找一个操作员将同一事件发送到多个订阅

您应该使用操作符来实现这一点

    public Flowable<Foo> getFlowable() {
        return subject
                .toFlowable(BackpressureStrategy.BUFFER)
                .doOnNext(tick -> log.info("tick: {}", tick))
                .flatMapSingle(tick -> sendFooRequest())
                .distinctUntilChanged()
                .publish()
                .autoConnect();
    }
public-Flowable-getFlowable(){
返回主题
.toFlowable(背压等级缓冲器)
.doOnNext(勾选->log.info(“勾选:{}”,勾选))
.flatMapSingle(勾选->sendFooRequest())
.distinctUntilChanged()
.publish()
.autoConnect();
}

自动连接
操作员将设置Flowable,以便在第一个订户订阅时开始发射。

您需要的行为称为多播,您可以通过多种方式实现。你可以用subject来做,但通常的方法是通过@Gustavo已经描述过的
publish
方法
ConnectableObservable
。然后根据上下文,您可以连接/refcount/autconnect/etc
    public Flowable<Foo> getFlowable() {
        return subject
                .toFlowable(BackpressureStrategy.BUFFER)
                .doOnNext(tick -> log.info("tick: {}", tick))
                .flatMapSingle(tick -> sendFooRequest())
                .distinctUntilChanged()
                .publish()
                .autoConnect();
    }