У меня есть существующее приложение Spray, использующее Spray Routing, и недавно я добавил актера загрузки файлов в файл based on the example.Spray Routing with File Upload Actor
То, что я не могу понять, состоит в том, как объединить мой существующий актер HttpService с моим файловым исполнителем, который не расширяет HttpService.
Мой существующий корень службы актер выглядит следующим образом:
class RootService extends Actor with HttpService with Routes with ActorLogging {
def receive = runRoute {
routes
}
}
И мой загрузить файл актер, как это:
class FileUploadService extends Actor with Logging {
def receive = {
case part @ HttpRequest(POST, Uri.Path("/upload"), headers, entity: HttpEntity.NonEmpty, protocol) => {
val parts = part.asPartStream()
val client = sender
val handler = context.actorOf(Props(new FileUploadHandler(client, parts.head.asInstanceOf[ChunkedRequestStart])))
parts.tail.foreach(handler !)
}
case start @ ChunkedRequestStart(HttpRequest(POST, Uri.Path("/upload"), _, _, _)) => {
val client = sender
val handler = context.actorOf(Props(new FileUploadHandler(client, start)))
sender ! RegisterChunkHandler(handler)
}
}
}
Я попытался модифицировать свой корень службы актера следующим образом:
class RootService extends Actor with HttpService with Routes with ActorLogging {
val fileUploadActor = context.actorOf(Props[FileUploadService], "fileUploadActor")
def receive = runRoute {
pathPrefix("upload") {
fileUploadActor ! _.request
} ~ {
route
}
}
}
Но это не работает должным образом. В конечном итоге ответ никогда не возвращает его клиенту (даже если я укажу ask vs tell).
Любые предложения по выполнению работы?
Спасибо!