【问题标题】:Akka Http actor injection in trait特征中的 Akka Http 演员注入
【发布时间】:2018-10-16 09:17:26
【问题描述】:

我有一个扩展 App 的对象,我在其中创建了 Actor System 和 Actor Materializer,并在给定的 Actor 系统下创建了一个 Actor。

object QuickstartServer extends App with UserRoutes {

  implicit val system: ActorSystem = ActorSystem("helloAkkaHttpServer")
  implicit val materializer: ActorMaterializer = ActorMaterializer()

  val userRegistryActor: ActorRef = system.actorOf(UserRegistryActor.props, "userRegistryActor")


   lazy val routes: Route = userRoutes
      Http().bindAndHandle(routes, "localhost", 8080)
    }

现在 UserRoutes 包含所有路由

trait UserRoutes extends JsonSupport {

  implicit def system: ActorSystem
  lazy val log = Logging(system, classOf[UserRoutes])
  def userRegistryActor: ActorRef

  lazy val userRoutes: Route =
    pathPrefix("users") {
      concat(
        pathEnd {
          concat(
            get {
              val users: Future[Users] =
                (userRegistryActor ? GetUsers).mapTo[Users]
//Remaining code 

现在我的问题是 Actor System 和在 QuickstartServer 中创建的 userRegistryActor Actor 是如何注入到路由文件中的?

你可以在这里找到完整的代码https://developer.lightbend.com/guides/akka-http-quickstart-scala/backend-actor.html

【问题讨论】:

    标签: scala akka akka-http


    【解决方案1】:

    在 trait 的开头,你可以看到这两个声明:

      implicit def system: ActorSystem
      def userRegistryActor: ActorRef
    

    这两个是特征中的抽象声明,这意味着特征的实现必须提供这两个。

    这就是对象中发生的事情,有这两个声明:

     implicit val system: ActorSystem = ActorSystem("helloAkkaHttpServer")
     val userRegistryActor: ActorRef = system.actorOf(UserRegistryActor.props, "userRegistryActor")
    

    相当一部分开发人员建议通过添加 override 关键字来使这种实现更加明确,如下所示:

     override implicit val system: ActorSystem = ActorSystem("helloAkkaHttpServer")
     override val userRegistryActor: ActorRef = system.actorOf(UserRegistryActor.props, "userRegistryActor")
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-01
      • 2017-05-07
      • 2018-03-04
      • 2019-04-23
      • 2014-03-09
      • 2019-01-16
      相关资源
      最近更新 更多