Сценарий
БД для приложения снизилась. Это приводит к тому, что любой субъект, ответственный за передачу важных данных в БД, не получая соединение
Предпочтительное поведение
Важные данные записываются в db, когда он возвращается в будущем в будущем.
Текущая реализация
Актер ловит DBException, обертывает данные в класс case DBWriteFailed и отправляет сообщение своему супервизору. Затем диспетчер планирует другую запись в будущем (например, 1 минуту), используя system.scheduler.scheduleOnce(...), чтобы мы не слишком крутились в кругах, ожидая возврата базы данных.
Эта реализация, безусловно, работает, но я чувствую, что может быть лучший способ.
- Протокол становится немного беспорядочным, когда участник, совершивший акт, должен ответить первоначальному отправителю после успешной фиксации.
- Регулярный поток сообщений для участника-актера никоим образом не дросселируется, и актер будет успешно обрабатывать новые сообщения, вероятно, не сможет подключиться к БД для каждого из них.
- Если сообщения слишком долго попадают в этот цикл повторных попыток, почтовые ящики действующих участников начнут баллотироваться. Важно, чтобы эти данные были зафиксированы, но ничто из этого не имеет значения, если приложение сканируется до остановки или сбоев из-за чрезмерного использования памяти.
Я новичок в akka, и я в значительной степени неопытен, когда речь заходит о супервизорных стратегиях, но я чувствую, что могу использовать один из тех, кто может справиться с этой логикой повторения.
Есть ли общий подход в akka для решения такой проблемы? Я на правильном пути или я должен идти в другом направлении?
Любая помощь приветствуется.