2016-05-26 14 views
1

Basierend auf diesem einfachen Code für Akka-HTTP:Akka-Http: Wie benutzt man einen Actor in einer Anfrage?

val route = 
    pathPrefix("myapp") { 
     path("search") { 
     get { 
      //ref ! DoSomething("foo") 
      complete(HttpEntity(ContentTypes.`application/json`, /* content here from an actor */)) 
     } 
     } 
    } 

Wie kann ich einen Wert von einem Schauspieler zurückkehren (sender ! content)?

Antwort

4

Verwenden Sie ask Muster und Karte ist es Rückkehr Zukunft.

import akka.pattern.ask // enable `?` 
import context.dispatcher // Future's need an execution context, we use the Actor#context's one 

(ref ? DoSomething("foo")).mapTo[ReturningType].map { result => 
    complete(HttpEntity(ContentTypes.`application/json`, result)) 
} 
+0

Nur um zu klären: um 'ask' Muster zu verwenden, um einer zu' Import akka.pattern.ask' braucht :) – Sergey

+1

ist es eine Möglichkeit, einen „sagen“ zu verwenden (!)? – Randomize

+1

Nun, Sie können RequestContext extrahieren (zum Beispiel über die extractRequestContext-Direktive), es an Ihren "ref" -Aktor übergeben (im DoSomething-Objekt) und dort context.complete aufrufen (result). – Tyth