2015-07-25 2 views
7

Как смешивать типизированных и нетипизированных актеров? Как я понял, что я должен указать главный актер, когда я создаю экземпляр ActorSystem как этогоКак смешивать типизированных и нетипизированных актеров?

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

С другой стороны, я использую Акку-клиент, который инициализируется как этот

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 я могу позвонить.

Другие материалы, которые я читал на эту тему являются

ответ

3

Хороший улов, это в настоящее время не удобно можно: то, что вы должны были бы сделать это, чтобы создать типизированную систему 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 
+0

Спасибо большое! Это работает, но вся вещь выглядит довольно недружественной из-за конфликтов имен. Мне пришлось написать 'AskPattern.Askable (typedRef).? (Start)'. – expert

+1

Тогда что-то не так с импортом, пожалуйста, откройте проблему github, чтобы мы могли ее исправить. –

Смежные вопросы