当调用主管播放器时,例如:
TemplateActors.templateSupervisor ! new TemplateMessage("***POST***", 1)
执行如下代码(属于同一类):
import akka.actor.{ Actor, Props, ActorLogging }
/**
* Actor TemplateSupervisor
*/
class TemplateSupervisor extends Actor with ActorLogging {
import scala.concurrent.duration._
import akka.actor.SupervisorStrategy._
import akka.actor.OneForOneStrategy
创建新的 Actor
val templateActor = context.actorOf( Props[ TemplateActor ], "TemplateActor" ))
val templateActor2 = context.actorOf( Props[ TemplateActorJuan ], "juan_carlos_actor" )
来自Actor模板Actor的查询路径
//log.info( "path templateActor2: " + templateActor2.path )
//log.info( "path templateActor: " + templateActor.path
我们将消息发送给 Actor:
// sent message
def receive = {
// Forward message to templateActor
case message: TemplateMessage => templateActor forward message
}
override val supervisorStrategy = OneForOneStrategy( ) {
case exception: Exception =>
exception.printStackTrace( )
log.error( exception, exception.getMessage( ) )
Restart
}
}
/**
* TemplateActor
*/
class TemplateActor extends Actor with ActorLogging {
import akka.pattern._
import scala.concurrent.{Future, ExecutionContext}
implicit val _: ExecutionContext = context.dispatcher
val actor = context.actorSelection("//ms-service-executor/user/TemplateSupervisor/juan_carlos_actor")
def receive = {
case message: TemplateMessage =>
log.info("************Realizando PING from TemplateActor")
actor ! new PING( "PING" )
case message: PONG =>
log.info("************PONG make in TemplateActor")
}
}
/**
* TemplateActorJuan
*/
class TemplateActorJuan extends Actor with ActorLogging {
import akka.pattern._
import scala.concurrent.{Future, ExecutionContext}
implicit val _: ExecutionContext = context.dispatcher
val actor = context.actorSelection("//ms-service-executor/user/TemplateSupervisor/TemplateActor")
def receive = {
case message: PING =>
log.info("************make PONG from TemplateActorJuan")
actor ! new PONG( "PONG" )
}
}
case class PING( val id: String )
case class PONG( val id: String )
模板演员类
import akka.actor.{ Props, ActorSystem }
import TemplateSupervisor
/**
* Method override for the unique ActorSystem instance
*/
trait Core {
implicit def system: ActorSystem
}
/**
* Definition of the ActorSystem and the ExecutionContext
*/
trait BootedCore extends Core {
import scala.concurrent.ExecutionContext
implicit lazy val system = ActorSystem( "ms-service-executor" )
implicit lazy val ex: ExecutionContext = system.dispatcher
sys.addShutdownHook( system.shutdown( ) )
}
/**
* Template project actors instantiation
*/
trait CoreActors { this: Core =>
/*
* Creacion del actor "TemplateSupervisor"
* Props: configuracion del actor
* system: unico actor existente
*/
val templateSupervisor = system.actorOf( Props[ TemplateSupervisor ], "TemplateSupervisor" )
}
/**
* Template actor references
*/
object TemplateActors extends BootedCore with CoreActors