使用RxJava由多个线程创建的速率限制多个可观察对象

时间:2015-09-17 08:51:56

标签: reactive-programming rx-java

我正在开发一个简单的REST应用程序,利用RxJava将请求发送到远程服务器(1)。对于每个传入REST API的请求,请求(使用RxJava和RxNetty)发送到(1)。一切正常,但现在我有一个新的用例:

为了不用太多的请求轰炸(1)我需要实现速率限制。解决此问题的一种方法(我假设)是将向(1)发送请求时创建的每个Observable添加到执行实际速率限制的另一个Observable(2)中。 (2)然后将或多或少地像一个队列,并尽可能快地处理出站请求(但不比速率限制快)。这里有一些伪代码:

Observable<MyResponse> r1 = createRequestToExternalServer() // In thread 1
Observable<MyResponse> r2 = createRequestToExternalServer() // In thread 2

// Somehow send r1 and r2 to the "rate limiter" observable, (2)

rateLimiterObservable.sample(1 / rate, TimeUnit.MILLISECONDS)

我如何使用Rx / RxJava来解决这个问题?

1 个答案:

答案 0 :(得分:0)

我会使用一个热计时器和一个原子计数器来跟踪给定持续时间内的剩余连接:

a