2015-07-25 23 views
7

Jak miksować aktorów i aktorów bez typu? Jak zrozumiałem, muszę określić głównego aktora, gdy tworzę instancję ActorSystem jak tenJak miksować aktorów i aktorów bez typu?

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

Z drugiej strony używam Akka-http który jest inicjowany jak ten

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

widzę, że mogę tworzyć wpisywanych systemu z systemu bez typu wywołując

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

Więc zakładając zrobiłem

val typeSystem = akka.typed.ActorSystem(untypedSystem) 

Jak utworzyć mojego pierwszego aktora z numerem od typeSystem? Nie ma wpisanego ActorContext, którego mogę wywołać.

Inne materiały czytałem na ten temat są

Odpowiedz

3

Dobry chwyt, to obecnie nie jest dogodnie możliwe: co trzeba by zrobić, aby utworzyć wpisany ActorSystem, a następnie uzyskać dostęp do podstawowej bez typu, aby uruchomić rozszerzenie HTTP, aleMetodato private[akka]. Możesz uzyskać do tego dostęp, umieszczając kod pomocniczy w projekcie w przestrzeni nazw Akka, lub możesz przejść na odwrót:

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 
+0

Wielkie dzięki! Działa, ale cała sprawa wygląda dość nieprzyjaźnie z powodu starć nazw. Musiałem napisać 'AskPattern.Askable (typedRef).? (Start)'. – expert

+1

Następnie coś jest nie tak z importem, proszę otworzyć problem na github, abyśmy mogli go właściwie naprawić. –

Powiązane problemy