rxjava下降了下游结果

时间:2017-09-14 21:36:14

标签: rx-java rx-java2

我有一个rx方法来进行api调用,这个方法的调用者可能会在很短的时间内多次发生。所以rx方法将是

public void apiCallWithRx() {
    apiService.makeApiCall()
        .subscribeOn(Schecdulars.io())
        .observeOn(AndroidSchedulers.mainTread())
        .subscribe(
           // onNext
           new onConsume(),
          // onError
           new onConsume(),

         );
} 

调用方法可以在短时间内多次调用此apiCallWithRx。 但问题是,在第二次或任何特定时间打电话时,我有时无法得到来自下流的响应。 onNext,onError或onComplete都不会被调用。 我想知道,这是因为缓冲还是背压...... 尝试使用rxjava1和rxjava2,它们是相同的。

对于任何建议,我将不胜感激。

更新1

我没有看到任何背压异常,所以它不能成为背压问题。

更新2

请忽略细节,Rx代码大部分时间都有效。我刚刚省略了一些用于说明目的的代码

更新3

我在后台有一个BlockingQueue,所以当队列中有可用数据时,实际上会调用此rx方法。可以随时将数据添加到队列中。并且这个rx方法是异步调用,因为这个方法只在第一个响应之后被调用,然后检查队列,如果有数据,那么我们发送第二个api请求。

2 个答案:

答案 0 :(得分:0)

默认情况下,

Observable是懒惰的,您必须subscribe才能运行Observable

答案 1 :(得分:0)

我不知道为什么在RxJava2中可以使用 subscribeOn observerOn 运算符,而无需指定必须执行它的线程。

但至少在RxJava1中,如果使用这些运算符,则异步运行它,然后必须等待执行才能得到结果。

检查此测试

@Test
public void testObservableAsync() throws InterruptedException {
    Subscription subscription = Observable.from(numbers)
            .doOnNext(increaseTotalItemsEmitted())
            .subscribeOn(Schedulers.newThread())
            .subscribe(number -> System.out.println("Items emitted:" + total));
    System.out.println("I finish before the observable finish.  Items emitted:" + total);
    new TestSubscriber((Observer) subscription)
            .awaitTerminalEvent(100, TimeUnit.MILLISECONDS);
}

您可以在此处查看另一个示例https://github.com/politrons/reactive/blob/master/src/test/java/rx/observables/scheduler/ObservableAsynchronous.java

相关问题