Я хочу иметь механизм повторных попыток, при котором, если задача не удалась, ее следует повторить через определенный интервал без блокировки или спящего потока.
Например, предположим, что у меня maxRetryAttempt равно 3, а интервал между повторными попытками равен 3 секундам. У меня есть список задач 1,2, 3,..10 Рабочий поток выбирает задачу 1. Если задача 1 не удалась сейчас, и я хочу повторить ее, но следующая попытка повтора будет через 3 секунды. Здесь я не хочу усыплять свою нить. Вместо этого я хочу поставить задачу в какую-то очередь, и рабочий поток должен выбрать задачу ровно через 3 секунды, чтобы повторить эту задачу.
Я проверил несколько существующих библиотек, таких как spring-retry. Это библиотеки, которые берут работу и переводят поток в спящий режим перед следующей попыткой. Так что все задачи занимают 9 секунд, прежде чем сдаться (предположим, что в худшем случае все задачи не выполняются из-за какой-то проблемы). В этом случае заполняются 10 различных рабочих потоков, и все они ожидают.
Есть ли какая-либо библиотека или шаблон проектирования или идея, которая соответствует моим ожиданиям?
Timer
илиScheduler
. Разные фреймворки предлагают разные вариации этой идеи. Я не знаю, как это выглядит в spring-boot, но, возможно, вы можете найти подсказку здесь: spring.io/guides/gs/scheduling-tasks - person Solomon Slow   schedule 01.07.2020