Как ограничить количество событий JEE CDI, чтобы остановить «429 Too Many Requests» - PullRequest
0 голосов
/ 29 июня 2018

Я занимаюсь разработкой приложения JEE, которое извлекает данные со ссылочных сайтов с использованием общедоступных API RESTful.

Мое приложение использует асинхронные события CDI для запуска нескольких вызовов этих API RESTful.

Я хочу быть "вежливым" и "внимательным" пользователем этих ресурсов 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 Too Many Requests"?

Является ли мой единственный вариант использования однопоточной модели?

...