我正在开发一个JEE应用程序,该应用程序使用公共RESTful API从参考站点提取数据。
我的应用程序正在使用异步CDI事件来触发对这些RESTful API的多次调用。
我希望成为这些API资源的“礼貌”和“考虑”用户,并尝试将我的API调用错开随机数 如下使用Retrofit和RxJava:-
final Flowable<Response<ResponseBody>> apiResponse = service.searchEuropePmc(queryParams);
compositeDisposable.add(apiResponse.delaySubscription(randomDelay(), TimeUnit.MILLISECONDS).subscribe(response -> reportResponse(response)));
这种方法减轻了问题,但是我仍然遇到如下错误:-
08:49:53,779 ERROR [stderr] (RxComputationThreadPool-3) <html><body><h1>429 Too Many Requests</h1>
08:49:53,779 ERROR [stderr] (RxComputationThreadPool-3) You've sent too many requests in a given amount of time. Please slow down and try again soon.
08:49:53,779 ERROR [stderr] (RxComputationThreadPool-3) </body></html>
这是由于我有10个EJB同时进行这些API调用的事实。
如何错开/安排这些并发的EJB调用,使之不再收到“ 429个请求太多”?
使用单线程模型是我唯一的选择吗?