Android 如何排队和延迟改装请求以避免达到api速率限制?

Android 如何排队和延迟改装请求以避免达到api速率限制?,android,retrofit,rate-limiting,Android,Retrofit,Rate Limiting,我正在使用一个实现节流的api。限制之一是每秒1个请求。啊。 我有下面的场景,它马上达到了极限 使用api/status检查api的状态 如果api已启动,请获取一个用户订阅列表 从订阅列表中加载页面 我是否可以在改造中插入任何东西,使每个网络请求在最后一个请求之后至少运行1000毫秒?我正在使用/学习rxjava,debounce在这里有什么用处吗?你可以限制你的可观察性 Observable<String> text = ... text.throttleLast(1

我正在使用一个实现节流的api。限制之一是每秒1个请求。啊。 我有下面的场景,它马上达到了极限

  • 使用api/status检查api的状态

  • 如果api已启动,请获取一个用户订阅列表

  • 从订阅列表中加载页面


我是否可以在改造中插入任何东西,使每个网络请求在最后一个请求之后至少运行1000毫秒?我正在使用/学习rxjava,
debounce
在这里有什么用处吗?

你可以限制你的可观察性

    Observable<String> text = ...
text.throttleLast(1, SECONDS)
    .flatMap(retrofitApiCall())
    .subscribe(result -> System.out.println("result: " + result));
一个(来自OkHttpClient)与一个(来自Guava)相结合是避免HTTP 429错误代码的一个很好的解决方案

假设我们希望每秒呼叫次数限制为3次:

import java.io.IOException;

import com.google.common.util.concurrent.RateLimiter;

import okhttp3.Interceptor;
import okhttp3.Response;

public class RateLimitInterceptor implements Interceptor {
    private RateLimiter limiter = RateLimiter.create(3);

    @Override
    public Response intercept(Chain chain) throws IOException {
        limiter.acquire(1);
        return chain.proceed(chain.request());
    }
}

这与调用debounce()有什么区别?
节流阀将通过延迟第二次排放(如果第二次排放太接近第一次排放)来避免两项排放过快<如果第二次排放在给定时间之前到达,则代码>去盎司
将降低第一次排放。在最坏的情况下,
debounce
不会排放任何物品,因为w.r.t.排放太快。debounce时间这绝对是解决方案。谢谢,我不知道拦截器添加了延迟逻辑,而调度器添加了重试逻辑
import java.io.IOException;

import com.google.common.util.concurrent.RateLimiter;

import okhttp3.Interceptor;
import okhttp3.Response;

public class RateLimitInterceptor implements Interceptor {
    private RateLimiter limiter = RateLimiter.create(3);

    @Override
    public Response intercept(Chain chain) throws IOException {
        limiter.acquire(1);
        return chain.proceed(chain.request());
    }
}