Блокировка одновременных запросов в Java / Retrofit на тот же хост - PullRequest
0 голосов
/ 28 декабря 2018

У меня есть веб-приложение фреймворка Java / Ninja, отправляющее запросы сторонним API через Retrofit API.

У меня есть поток T1, который генерируется из пула потоков с использованием фреймворка Ninja Schedule аннотация (http://www.ninjaframework.org/apidocs/ninja/scheduler/Schedule.html). T1 непрерывно опрашивает host1 (example.com).

Когда другой поток сообщает, что T2 запускает запрос к тому же хосту (example.com), я хочу, чтобы T2 дождался, пока T1 завершит свои операции, ии наоборот.

Я извлек http://square.github.io/okhttp/3.x/okhttp/okhttp3/Dispatcher.html,, но похоже, что maxRequestsPerHost может не работать одновременно.

Я попытался создать hashMap для изменения hostStatus из каждого потока и включениястатус внутри синхронизированного блока, но добавление этого к нескольким методам кажется громоздким.

Я не уверен, какой шаблон параллелизма или механизм блокировки подходит для этого случая. Есть ли способ добавить hostIds в очередь или другой шаблонреализовать это поведение.

...