谁拥有ReactiveX中的链接?

时间:2017-01-31 15:47:28

标签: java rx-java reactivex

在Java中,PropertyChangeSupport observable维护着一个观察者列表。因此,如果删除了observable,观察者就会收集垃圾。

所以,一个观察者持有链接。

我的印象是,ReactiveX不是这样。虽然observable有一个subscribe方法,但它返回一个Subscription对象。该对象是否包含链接?

如果我将此对象添加到add()的观察者,这将是唯一的方法,让观察者保持链接?或者观察者是否持有链接?

1 个答案:

答案 0 :(得分:0)

我认为Observable仍然保持与Observer的连接。看看下面的代码。

private Observable<CurrencyRatesDTO> getCurrencyRatesObservable(Set<String> currencies) {
        return Observable.<CurrencyRatesDTO> create(sub -> {
            CurrencyRatesDTO currencyRatesDTO = restTemplate.getForEntity(
                    CURRENCY_SERVICE_API + RestUtil.QUERY_PARAM_START_SYMBOL
                            + RestUtil.getQueryParamStringForMultiValuedAttribute(SYMBOLS, currencies),
                    CurrencyRatesDTO.class).getBody();
            sub.onNext(currencyRatesDTO);
            sub.onCompleted();
        }).doOnNext(c -> log.debug("Currency rates were retrieved successfully."))
                .doOnError(e -> log.error("An ERROR occurred while retrieving the currency rates.", e));
}

我们异步调用一些休息服务。一旦我们得到结果,我们使用onNext方法通知Observer并在向Observer发出完成信号之前发出该项。我写了一些博客文章[1] [2] [3],您可能会发现它们在RxJava环境中很有用。以下是我博客文章的一些摘录。据说很明显,Observable保留了对Observer的引用。

RxJava提供Observables和Observers。 Observable可以发送值。观察员,通过订阅观察Observables。当Observable发出错误时,观察者会在Observable发出值时收到通知。当Observable发送不再有任何值要发出的信息时,它们也会收到通知。相应的函数是来自Observer接口的onNext,onError和onCompleted()。 Subscription的实例表示观察者和可观察者之间的连接。如果你在这个实例上调用unsubscribe(),那么它将删除连接。

希望这会有所帮助。快乐的编码!

[1] http://ravindraranwala.blogspot.com/2016/12/introducing-java-reactive-extentions-in.html [2] http://ravindraranwala.blogspot.com/2017/01/calling-exterenal-nosql-database.html [3] http://ravindraranwala.blogspot.com/2017/01/combine-emissions-of-multiple_16.html