8

如何混合有类型和无类型的演员?据我了解,当我创建这样的实例时,我必须指定主要ActorSystem演员

val system: akka.typed.ActorSystem[Start] = akka.typed.ActorSystem("main", Props(mainBehaviour))

另一方面,我使用像这样初始化的akka​​-http

implicit val system = ActorSystem()
implicit val executor = system.dispatcher
implicit val materializer = ActorMaterializer()
// etc...

我看到我可以通过调用从无类型系统创建类型系统

object ActorSystem {
  def apply(untyped: akka.actor.ActorSystem): ActorSystem[Nothing] = new Wrapper(untyped.asInstanceOf[ExtendedActorSystem])
}

所以假设我做了

val typeSystem = akka.typed.ActorSystem(untypedSystem)

如何创建我的第一个类型的演员typeSystem?没有我可以调用ActorContext的类型。actorOf

我读过的关于这个主题的其他材料是

4

1 回答 1

4

很好,这目前还不太可能:您需要做的是创建类型化的 ActorSystem 然后访问底层的无类型的 ActorSystem 以启动 HTTP 扩展,但underlying方法是private[akka]. 您可以通过在 Akka 命名空间中的项目中放置一些帮助代码来访问它,或者您可以反过来:

implicit val untyped = akka.actor.ActorSystem("main")
import untyped.dispatcher
implicit val mat = ActorMaterializer()

import akka.typed.Ops._
val typedRef = untyped.spawn(Props(mainBehaviour))
val typedSys = ActorSystem(untyped)

Http().bind(...) // and send things to typed
于 2015-07-27T19:07:02.390 回答