Можно ли установить обратный вызов после завершения обработки запроса в Spray?

Я пытаюсь обслуживать большие временные файлы из Spray. Мне нужно удалить эти файлы после завершения HTTP-запроса. Я не мог найти способ сделать это до сих пор ...

Я использую код, похожий наэтот или это:

          respondWithMediaType(`text/csv`) {
            path("somepath" / CsvObjectIdSegment) {
              id =>
                CsvExporter.export(id) { // loan pattern to provide temp file for this request
                  file =>
                    encodeResponse(Gzip) {
                      getFromFile(file)
                    }
                }
            }
          }

Так по сути это вызываетgetFromFile который завершает маршрут вFuture, Проблема в том, что даже если этоFuture веб-запрос еще не завершен. Я пытался написать функцию, похожую наgetFromFile и я бы позвонилfile.delete() вonComplete того, чтоFuture но у него та же проблема -Future завершается до того, как клиент завершил загрузку файла, если файл достаточно велик.

ВотgetFromFile от спрей для справки:

/**
* Completes GET requests with the content of the given file. The actual I/O operation is
* running detached in a `Future`, so it doesn't block the current thread (but potentially
* some other thread !). If the file cannot be found or read the request is rejected.
*/
def getFromFile(file: File)(implicit settings: RoutingSettings,
                            resolver: ContentTypeResolver,
                            refFactory: ActorRefFactory): Route =
  getFromFile(file, resolver(file.getName))

Я не могу использоватьfile.deleteOnExit() потому что JVM не может быть перезапущен на некоторое время, а временные файлы будут продолжать лежать вокруг траты дискового пространства.

С другой стороны, это более общий вопрос - есть ли способ установить обратный вызов в Spray, чтобы после завершения обработки запросов можно было освободить ресурсы или обновить статистику / журналы и т. Д.

Ответы на вопрос(1)

Ваш ответ на вопрос