У нас есть серверная веб-служба Java, работающая на 2 производственных серверах с 2 JVM на каждом из них, за балансировщиком нагрузки на сервере приложений Websphere.
Мой вариант использования:
- Вызов внешнего API в первый раз после развертывания.
- If Response.OK
- Cache the response in an external datastore (not relevant for this question)
- For the next client requests of the day and if the time of the requests are not equal to or immediately after a set of times (9:00, 11:00, 13:00, 15:00)
- Return the cached response
- If the client request happens to be on any given time in the set (9:00, 11:00, 13:00, 15:00)
- Call the external API and update cache (not relevant again). Example., request comes at 9:00
- For all the subsequent requests from 9:00 to 10:59 (because next time in the set is 11:00)
- Return the cached response
- At 11:00
- Call the external API and update cache
- И так далее..
Таким образом, в день выполняется только четыре запроса к внешнему API, а не прямой вызов внешнего API для каждого запроса.
Как я могу добиться этого на уровне приложения на Java на всех производственных серверах, учитывая переход на летнее время в определенном часовом поясе, без какого-либо сетевого программирования или программирования ввода-вывода?
Примечание. Приложение не использует загрузку Spring. Я пытаюсь сделать это исключительно на Java.
java.util.Timer
иjava.util.TimerTask
, у таймера есть методschedule
, это связано с потоком, может усложниться, если не обрабатывается должным образом - person sanjeevRm   schedule 15.05.2021Select for update
, в этом случае только один поток сможет получить блокировку, выполнить вызов, обновить кеш, снять блокировку. Другие параллельные потоки будут ожидать блокировки записи. Да, во время первого запуска, если вы запускаете много приложений одновременно, другое может ждать, пока первое не получит значение, но позже, если один поток заметит, что кеш просто обновляется, он просто вернет устаревшие данные в последний раз. , или дождитесь завершения обновления, в зависимости от ваших требований. - person Gas   schedule 21.05.2021