我如何混合有类型和无类型的演员?
How do I mix typed and untyped actors?
如何混合类型化和非类型化 actor?据我了解,当我像这样
创建 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
。
我读过的关于这个主题的其他材料是
很好,这目前不太方便:您需要做的是创建类型化的 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
如何混合类型化和非类型化 actor?据我了解,当我像这样
创建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
。
我读过的关于这个主题的其他材料是
很好,这目前不太方便:您需要做的是创建类型化的 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