我如何混合类型和非类型演员?正如我所理解的,在创建这样的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
。
我所读到的关于这个问题的其他材料有
发布于 2015-07-27 11:07:02
好的捕获,这目前是不可能的:您需要做的是创建类型化的ActorSystem,然后访问底层的非类型化的underlying
扩展,但是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
https://stackoverflow.com/questions/31621607
复制