如何对JEE CDI事件进行限制以阻止“ 429个请求太多”

时间:2018-06-29 08:05:20

标签: multithreading java-ee cdi

我正在开发一个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个请求太多”?

使用单线程模型是我唯一的选择吗?

0 个答案:

没有答案