1

我是阿卡的新手。在学习的过程中,我在Github上创建了一个示例项目。本项目在这里使用AkkaAkka-HTTPSlick和。我想为 HTTP 路由实现 Akka Actors。我试图实现这一点,但没有按预期工作。FlywayMacwireredis/

目前Controller正在作为:

class AuthController(userService: UserService[Future]) extends Controller {

  import de.heikoseeberger.akkahttpjson4s.Json4sSupport._
  implicit val serialization: Serialization.type = jackson.Serialization // or native.Serialization
  implicit val formats: DefaultFormats.type = DefaultFormats

  override def route: Route = pathPrefix("users") {
    pathEndOrSingleSlash {
      register
    }
  }

  private def register = {
    (post & entity(as[RegistrationData])) { registrationData =>
      complete(userService.registerUser(registrationData))
    }
  }

}

但是我正在尝试通过对现有代码进行一些更改来实现类似的功能:

class AuthController(userhandler: ActorRef) extends Controller {

  import de.heikoseeberger.akkahttpjson4s.Json4sSupport._
  implicit val serialization: Serialization.type = jackson.Serialization // or native.Serialization
  implicit val formats: DefaultFormats.type = DefaultFormats

  override def route: Route = pathPrefix("users") {
    pathEndOrSingleSlash {
      register
    }
  }

  private def register = {
    (post & entity(as[RegistrationData])) { registrationData =>
      complete(
        (userHandler ? UserHandler.Register(registrationData)).map {
          case true => OK -> s"Thank you ${registrationData.username}"
          case _ => InternalServerError -> "Failed to complete your request. please try later"
        }
      )
    }
  }

}

谁能建议我如何实现上述内容?我感谢您的帮助。

4

1 回答 1

1

当问这样的问题时,请包括你看到的错误。在这里,我假设它是关于缺少的执行上下文(供 Future 运行)以及Timeout,阅读更多关于ask(AKA ?) 模式的信息:https ://doc.akka.io/docs/akka/2.5/actors.html #ask-send-and-receive-future

一般来说,您缺少的可能(因为不确定您的问题到底是什么)可以通过以下方式解决:

import system.dispatcher // The ExecutionContext that will be used

system 是一个参与者系统,并且:

implicit val timeout = Timeout(5 seconds) // needed for?below

顺便说一句,您也可以从路由中提取ActorSystem实例:

于 2018-01-30T16:50:17.657 回答