Как реализовать HTTP-маршрутизацию на основе Actor в Akka
Я новичок в Акке. Во время обучения я создал пример проекта на Github. Здесь этот проект использует Akka
, Akka-HTTP
, Slick
, Flyway
а также Macwire
, Я хотел реализовать Akka Actors для HTTP-маршрутизации. Я пытался реализовать это на 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"
}
)
}
}
}
Может кто-нибудь предложить мне, как я могу реализовать вышеизложенное? Я ценю вашу помощь.
1 ответ
Задавая такие вопросы, пожалуйста, укажите ошибку, которую вы видите. Здесь я предполагаю, что речь идет об отсутствующем контексте выполнения (для запуска в будущем), а также о Timeout
, читайте больше о ask
(AKA ?
) шаблон: https://doc.akka.io/docs/akka/2.5/actors.html
В общем, то, что вы упускаете, МОЖЕТ (так как не знаете, в чем именно заключается ваша проблема), может быть решено с помощью:
import system.dispatcher // The ExecutionContext that will be used
система, являющаяся актерской системой, и:
implicit val timeout = Timeout(5 seconds) // needed for
? below