Мы пытаемся реализовать политику повтора для нашей логики базы данных, когда получаем исключения из-за истечения времени ожидания из-за исчерпания пула соединений. Это происходит, когда у нас наблюдается всплеск необычно большой активности в течение небольшого периода времени. Мы увеличили максимальный размер пула, чтобы избежать этой ситуации, но мы также хотели бы иметь логику повтора в качестве плана резервного копирования.
Документация по пулу соединений заявляет, что:
Когда пул подключений включен, и если возникает ошибка тайм-аута или другая ошибка входа в систему, будет создано исключение, и последующие попытки подключения завершатся неудачно в течение следующих пяти секунд, «периода блокировки». Если приложение пытается подключиться в течение периода блокировки, первое исключение будет сгенерировано снова. Последующие сбои по окончании периода блокировки приведут к появлению новых периодов блокировки, которые вдвое превышают продолжительность предыдущего периода блокировки, но не более одной минуты.
Полли, по-видимому, хорошо подходит для решения этой проблемы с помощью комбинации политик PolicyWrap, включающей в себя Fallback, WaitAndRetry и Circuit Breaker. Хорошая фотография этого здесь
В идеале я надеялся, что смогу указать экспоненциальную длительность прерывания для прерывателя цепи, чтобы она соответствовала периоду удвоения, описанному выше. Я не видел в Интернете примеров того, как это могло быть возможно, так что, может быть, это невозможно?
Какой здесь подход к конфигурации? Следует ли указать прерыватель цепи с 5-секундной продолжительностьюOfBreak, а затем использовать экспоненциальную повторную попытку для компонента WaitAndRetry в 5, 10, 20, 40 и 60 секунд? Это кажется неудачным в том случае, если соединения только что стали доступны, и ваша старая операция только что начала свое 40-секундное ожидание, в то время как новая операция будет работать немедленно.
Другая возможность - иметь 5-секундную durationOfBreak, а затем заставить компонент WaitAndRetry использовать очень маленькое ожидание с большим количеством повторных попыток, хотя мы знаем, что многие из этих повторных попыток завершатся неудачно, если они будут выполнены до того, как указано в документации.
Я ценю ваш отзыв!