Логика повторов при ошибке...
От: Shmj Ниоткуда  
Дата: 02.12.22 20:15
Оценка:
Есть пресловутый Polly, который реализует несколько паттернов. Среди прочих — CircuitBreaker.

Но вот как лучше делать повторы на практике? Можно ли придумать некое универсальное настраиваемое решение? Что используете вы?

Некоторые мысли в форме потока сознания:

  Скрытый текст
Давайте так — некая операция, которая не прошла. Тут сразу разделить на устраняемые и не устраняемые без перекомпиляции ошибки:

1. Устраняемые: сетевые (отвалилась база данных, отвалился внешний сервис), системные (как то файл заблокирован для записи, может потом разблокируется, т.к. админ просто открыл его в блокноте и потом закроет или нехватка места на диске — админ почистит).
2. Не устраняемые: ошибка в коде, как то не учли что логин может быть не только email-ом, но и телефоном — и пытаетесь телефон преобразовать к email — можно делать это бесконечное количество раз и результат будет всегда одним и тем же — долбежка не имеет смысла.


Т.е. сразу нужно как-то разделять исключения на два типа. Иногда это не так просто как кажется, иногда нет возможности строгой классификации

Далее. Пусть мы разделили худо-бедно ошибки и можем повторять. Но как часто повторять? Бесконечно? Может таки не стоит — может всему есть предел? Ок, этот предел можно конфигурировать. Но нужна какая-то хитрая формула.

К примеру, задали по числам Фибоначчи секунд:

0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181, 6765, 10946, 17711


Но вот, допустим, некий сервис внешний был не доступен сутки. Представьте какого значения достигло ЧФ и как долго ждать повтора Вроде можно ограничить — не более чем час. Или же какой-то рычаг оставить — повторить все. К примеру, когда вы узнали что была проблема с базой и она решилась.

В общем — кто к чему пришел?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.