我有一个rx方法来进行api调用,并且此方法的调用者可能会在很短的时间内发生多次。因此,RX方法是rxjava下降结果
public void apiCallWithRx() {
apiService.makeApiCall()
.subscribeOn(Schecdulars.io())
.observeOn(AndroidSchedulers.mainTread())
.subscribe(
// onNext
new onConsume(),
// onError
new onConsume(),
);
}
主叫方法可以多次调用该apiCallWithRx在很短的时间.. 但问题是,我有时不可能得到downtream响应从第二次打电话时,或任何特定的时间。 onNext,onError或onComplete都不会被调用。 我想知道,这是因为缓冲区还是backpressure .. 试图与rxjava1和rxjava2,他们是一样的。
我会非常感谢任何意见。
更新1
我没有看到任何异常背压,所以它不可能是一个背压问题。
更新2
请忽略细节时,Rx代码工作的大部分时间。我只是省略了一些代码说明目的
UPDATE 3
我有一个的BlockingQueue的背景,所以当在队列中的可用数据此RX方法实际上是所谓的。数据可以随时添加到队列中。而这个rx方法是不是异步调用,因为这个方法只有在第一个响应后才调用,然后检查队列,如果有数据的话我们发送第二个api请求。
看到另一个例子使用与RxJava一个BlockingQueue的是容易出现死锁。您可能需要一个UnicastSubject缓冲数据,直到下游可以使用它。 – akarnokd
@akamokd从android的UI线程调用apiCallWithRx()方法,所以ExecutorService在后台线程中从BlockingQueue获取数据,并将数据传递到UI线程,并在UI线程上触发apiCallWithRx()方法。每当我们从服务器获得针对先前请求数据的api响应时,它将检查阻塞队列以获取下一个请求数据。所以API调用和BlockingQueue是相当分离的,我不认为这里有一个死锁 – Cheng