我是Akka的新手。在学习的同时,我在Github创建了一个示例项目。此项目使用Akka
,Akka-HTTP
,Slick
,Flyway
和Macwire
。我想为HTTP路由实现Akka Actors。我尝试在redis/
上实现此功能但未按预期工作。
目前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"
}
)
}
}
}
任何人都可以建议我如何实施上述内容?感谢您的帮助。
答案 0 :(得分: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
系统是一个演员系统,并且:
implicit val timeout = Timeout(5 seconds) // needed for
below
您可以从路线中extract an ActorSystem
instance以及btw: