Как реализовать 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

Вы можете извлечь ActorSystem Например, из маршрутов:

Другие вопросы по тегам