2

我正在努力让这个工作,你能建议吗?

def perRequestActor(message: RestMessage): Route = {
  // Compiler error Type mismatch: found (RequestContext) => ActorRef, required Route
  ctx: RequestContext => system.actorOf(propsCreator(ctx, message), "per-req-actor")
}
val route: Route = 
get {
  perRequestActor(new RestMessage("someVal"))
}

如何解决该编译器错误并继续使用 tell 模式来完成请求?请注意我没有使用喷雾。使用 akka-http

4

1 回答 1

1

该方法的返回类型perRequestActor是 Route,但您返回的是ActorRef.

从文档

type Route = RequestContext => Future[RouteResult]

它是一个以 RequestContext 作为参数并返回 Future[RouteResult] 的函数的简单别名。

通常,当一个路由接收到一个请求(或者更确切地说是一个请求上下文)时,它可以执行以下操作之一:

Complete the request by returning the value of requestContext.complete(...)
Reject the request by returning the value of requestContext.reject(...) (see Rejections)
Fail the request by returning the value of requestContext.fail(...) or by just throwing an exception (see Exception Handling)
Do any kind of asynchronous processing and instantly return a Future[RouteResult] to be eventually completed later on

对于使用tell模式,您可以向您创建的参与者发送消息。

val actor = system.actorOf(propsCreator(ctx, message), "per-req-actor")
actor ! SomeMessage

最新版本(1.0)的文档akka-http更清晰,签名略有不同。如果您刚开始学习,您可能应该使用它。

于 2015-11-03T09:49:01.717 回答