这可以通过结合使用
onComplete指令和Ask模式来实现。
在下面的示例中,
RequestHandlerActoractor用于创建
HttpResponse基于的
HttpRequest。从路线内询问此演员。
我从来没有使用Java来路由代码,所以我的回应是在Scala中。
import scala.concurrent.duration._import akka.actor.ActorSystemimport akka.http.scaladsl.model.HttpResponseimport akka.http.scaladsl.model.HttpRequestimport akka.actor.Actorimport akka.http.scaladsl.server.Directives._import akka.actor.Propsimport akka.pattern.askimport akka.util.Timeoutimport scala.util.{Success, Failure}import akka.http.scaladsl.model.StatusCodes.InternalServerErrorclass RequestHandlerActor extends Actor { override def receive = { case httpRequest : HttpRequest => sender() ! HttpResponse(entity = "actor responds nicely") }}implicit val actorSystem = ActorSystem()implicit val timeout = Timeout(5 seconds)val requestRef = actorSystem actorOf Props[RequestHandlerActor]val route = extractRequest { request => onComplete((requestRef ? request).mapTo[HttpResponse]) { case Success(response) => complete(response) case Failure(ex) => complete((InternalServerError, s"Actor not playing nice: ${ex.getMessage}")) } }
然后,可以
bindAndHandle像其他任何Flow一样使用此路由传递给方法。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)