Утечка ресурсов таймаута Akka - PullRequest
0 голосов
/ 11 марта 2020

У меня вопрос о тайм-аутах Akka.

Например, у меня есть актер Supervisor, который отправляет сообщение DBActor, чтобы начать чтение базы данных. Супервизор устанавливает время ожидания 5 секунд.

DBActor начинает чтение базы данных; он получает ResultSet, а затем вводит al oop для итерации строк ResultSet и построения возвращаемого значения.

Затем супервизор испытывает исключение Timeout и возвращает значение из блока .recover

Мой вопрос DBActor продолжает l oop через ResultSet после TimeoutException? Потому что это будет утечка ресурсов.

1 Ответ

1 голос
/ 12 марта 2020

DBActor не зависит от супервизора и будет продолжать обрабатывать записи до тех пор, пока он не будет завершен или ему не будет приказано остановиться. Неважно, что руководитель отказался от текущего запроса, потому что администратор базы данных не знает этого. Если вы хотите, чтобы процесс был остановлен досрочно, супервизору придется отправить еще одно сообщение администратору базы данных, чтобы он сказал, чтобы прервать операцию. Супервизору также придется иметь дело со случаем, когда результаты поступают после истечения времени ожидания.

Также обратите внимание, что Scala не может "утекать" ресурсы как таковые, поскольку он реализует сборку мусора. Если ресурсы где-то накапливаются, то это потому, что ссылка на этот ресурс удерживается объектом.

...