난 /fire 종점을 노출하는 akka-http로 작성된 REST 서비스가 있습니다. 해당 엔드 포인트가 호출되면 서비스는 ~ 50MB의 파일을 다른 서비스로 보내야합니다. 그러나 /fire 엔드 포인트는 호출자에게 즉시 반환하고 파일을 비동기 적으로 화재 및 잊어 버리는 방식으로 계속 보내야합니다.akka-http에서 응답 후에도 스칼라 선물이 계속 실행됩니까?
내 구현은 내가 그것을 시험이
path("fire") {
post { request: FireRequest =>
complete {
sendFile(request.path)
StatusCodes.OK
}
}
}
}
def sendFile(path: String): Future[Unit] = Future {
// send the large file to another service
}
모양과 그것을 잘 작동합니다.
그러나 ASP.NET에서 비슷한 동작을 구현할 때 완성 된 요청에 의해 생성 된 스레드가 결국 사라지기 때문에 비동기 작업을 처리하기 위해 타사 프레임 워크 (Hangfire)를 사용해야했습니다.
내 질문 : 내 akka-http sendfile 성공적으로 완료 될 때까지 실행되도록 보장되거나 실행되는 스레드가 종료 될 수 있습니까?
또한, 의도적으로'scala.concurrent.Future'를 실패하는 개념이 없습니까, 아니면 제가 빠진 것이 있습니까? – rethab
무슨 뜻인지 확실하지 않습니다. 성공한 미래를 실패한 약속으로 바꿀 수 있으며 실패한 약속을 만들 수 있습니다. 성공적인 약속을 실패한 것으로 바꾸는 것은 조건부로 수행 할 수 있습니다. 따라서 어떤 종류의 "미래 취소"를 구현할 수 있습니다 (단,이 취소는 제한적이며 현재의 약속이 실패로 바뀔뿐 아니라 " 출처") –